MYSQL 总结 索引优化

索引的好处

索引减少了存储引擎需要扫描的数据量

索引帮助我们进行排序以避免使用临时表。因为B树索引是按键值的顺序存放的,所以可以利用B树索引进行排序,避免使用磁盘临时表进行排序的IO消耗

索引可以把随机IO变成顺序IO ; 因为B树索引按照键值顺序存放。

索引是不是越多越好

索引会增加写操作成本; 在插入数据的同时,也会修改索引,索引越多修改数据的时间也会越长,Innodb 引入插入缓存,把多次插入合并成一次来缓解这个问题。

索引太多会增加查询优化器的选择时间。如果一个列可选择的索引很多,也会增加优化器判断该列使用哪种索引的时间。

B树索引

使用B+树结构存储数据。

Myisam B树索引叶子节点使用 数据的物理位置来引用行, innodb B树索引是使用数据的主键来引用行。

B树索引增加数据的查询速度。不在使用全表扫描,而是从树的根节点进行查找。

B树索引更适合范围查找。 因为B数索引是按顺序进行查找。

使用B树索引的情况

全值匹配。 例如索引字段为订单号, 查询时根据订单号进行查询。

匹配最左前缀的查询。例如订单号和订单日期组成的联合索引, 如果根据订单号进行查询是可以用到联合索引的,而如果只根据订单日期进行查询是不会使用到联合索引的。

匹配列前缀查询。例如订单号 like '77%', 也可以使用到上面的联合索引。

匹配范围值的查询。 例如 订单号 小于某值 and 订单号 大于某值。

精确匹配左前列并范围匹配另外一列。例如 订单号等于某值, 订单日期在某个范围。

只访问索引的查询。 又称覆盖索引。

Hash 索引

Hash索引是Hash表实现的, 只有查询条件精确匹配索引中的所有列时,才能使用到Hash索引。也就是说Hash索引只能用于等值查询中,模糊查询不能使用。

Hash索引中的所有列,存储引擎都会为每一行计算一个Hash码,Hash索引中存储的就是Hash码。 由于只存储Hash码,所以Hash索引存储是很紧凑的,所以Hash索引查询方式比较快。

Hash 索引限制

二次查找。 Hash索引存放的是Hash码和对应行的指针。查找先找到行,再去对应行读取数据。

Hash索引无法进行排序。

Hash索引无法支持部分查找和范围查找。

Hash索引中Hash码的计算可能会发生冲突。

索引优化策略

发布了12 篇原创文章 · 获赞 0 · 访问量 250

猜你喜欢

转载自blog.csdn.net/zhzsdiligence/article/details/102554019