MySql索引

MySql索引分类:

1)B-Tree

缺点:

  1. 只能索引列最左边开始
  2. 不能跳过索引中的列
  3. 不能优化访问任何在第一个范围条件右边的列

2)哈希索引

只对精确查找有用
缺点:

  1. 不能进行排序
  2. 不支持部分键匹配
  3. 只支持=, in(), <=>相等比较

3)空间数据索引(R-Tree)

和B-Tree不同,这类索引无须前缀查询。空间索引会从所有维度来索引数据。查询时,可以任意维度组合查询。

索引优点

  1. 减少服务器需要扫描的数据量
  2. 帮助服务器避免排序和临时表
  3. 将随机I/O变为顺序I/O

使用索引策略

  1. 独立列
    a. 不能是表达式的一部分,也不能是函数的参数
  2. 保证较高的前缀索引选择性
  3. 多列索引
    a. 在多个列上创建独立的单列索引大部分情况下并不能提高MySql的查询性能
    b. 但在MySql5.0和更高版本的MySql中可以使用“索引合并”策略优化查询,使其使用单列索引;但也说明这是一个糟糕的索引设计;
  4. 选择合适的索引列顺序
    a. 不考虑排序和分组时将选择性高的列放到索引的最前列
  5. 聚簇索引
    a. InnoDB中支持主键聚集数据,也就是被索引的类就是主键列;
    b. 如果没有定义主键,InnoDB选择一个唯一非空索引代替。
    c. 最好避免随机主键聚簇索引,自增主键索引最好;
    d. 顺序主键在高并发的情况下会有热点问题;
  6. 覆盖索引
    a. 索引中包含所有需要查询的字段,就不需要读取数据行,称为覆盖索引
相信技术的力量,原创技术文章,感谢您的支持!