性能优化-索引

概述

  • 索引优化是对查询性能优化最有效的手段,索引能轻易将查询性能提高几个数量级。

索引类型

  • 在Mysql中,索引是在储存引擎层而不是在服务器层实现的,不同储存引擎的索引的工作方式并不一样。
B-Tree(从技术上来说是B+Tree) 索引

B-Tree 通常意味着所有的值都是按顺序存储的,并且每一个叶子页到根的距离相同,B-Tree对索引列是顺序组织存储的,所以很适合查找范围数据,请注意,索引对多个列值进行排序的依据是建立索引列的顺序,B-Tree索引对如下类型的查询有效,例如建立索引 key(a,b,c)

  • 全值匹配 where(a=1 and b=1 and c=1)
  • 匹配最左前缀 where(a=1)
  • 匹配列前缀 where(a like 'J%')
  • 匹配范围值 where(a > 1)
  • 精确匹配某一列并范围匹配另外一列 where( a = 1 and b > 1)
关于B-Tree索引的限制
  • 如果不是按照索引的最左列开始查找,则无法使用索引。例如where(b=1),where(c=1), where(a like '%a')
  • 不能跳过索引中的列。例如where(a = 1 and c=1)
  • 如果查询中有某个列的范围查询,则其右边所有列都无法使用索引优化查找。 例如where(a = 1 and b > 1 and c = 1)

哈希索引

哈希索引基于哈希表实现,对于每一行数据,存储引擎都会对所有的索引列计算一个哈希码储存在索引中,同时在哈希表中保存指向每个数据行的指针,只支持精确查找不支持排序,只支持全值匹配。

你可能感兴趣的:(性能优化-索引)