相同点:
-
都是B+树的底层实现。
-
WHERE条件都符合索引最左匹配原则。
不同点:
-
MyISAM的存储文件有三个,frm、MYD、MYI 文件;InnoDB的存储文件就两个,frm、ibd文件。总文件大小InnoDB引擎占用空间更小。
-
InnoDB的存储文件本身就是索引构成,建立新索引的时间比MyISAM快。
-
MyISAM比InnoDB查询速度快,插入速度也快。
-
主键区间查询,InnoDB查询更快。字符串区间查询,MyISAM相对更快。
-
有A、AB、ABC索引的情况下,A OR B 查询,InnoDB查询性能比MyISAM慢。不建议使用OR 条件进行查询。
-
InnoDB表没有命中到 A、B、C 索引最左原则时,BC组合查询命中了索引,但还是完全扫描,比全表扫描快些。MyISAM是全表扫描。
软件层面的优化一是合理加索引;二是优化执行慢的sql。
此二者相辅相成,缺一不可,如果加了索引,还是查询很慢,这时候就要考虑是sql的问题了,优化sql。
实际生产中的sql往往比较复杂,如果数据量过了百万,加了索引后效果还是不理想,使用集群、垂直或水平拆分。
网友评论