创建高性能的索引笔记

B树索引是按顺序组织的,因此适合查找范围数据
B树索引适合全键值,键值范围和键前缀查找。

全文索引

索引的优点
索引可以让服务器快速地定位到表的指定位置
索引大大减少了服务器需要扫描的数据量
索引可以将随机I/O变为顺序I/O

三星系统原则:

相关的记录放到一起为一星;索引的数据顺序和查找中的排列顺序一致为一星;覆盖索引为一星;

索引的使用是相对的:对于非常小的表,大部分的情况下,简单的全表扫描更高效。

高性能的索引策略

  1. 独立的列

    将建有索引的列单独放在一侧,而不是需要进行某种运算。“独立的列”是指索引列不能是表达式的一部分,也不能是函数的参数。

  2. 前缀索引和索引选择性

    索引选择性越高越好,如果1000个记录,1000个记录的值都不相同是最优的。

    前缀索引的缺点是,无法使用前缀索引进行ORDER BY和GROUP BY,也无法用作覆盖索引。

    另:有时也会需要后缀索引,MYSQL不支持,但是可以通过字符串反转后存储,并基于此进行前缀索引,通过触发器进行维护。

聚簇索引

是一种数据存储方式。

InnoDB通过主键聚集数据。

如果没有定义主键,InnoDB会选择一个唯一的非空索引代替。如果没有这样的索引,引擎会隐式定义一个主键来作为聚簇索引。

二级索引可能比想象的要大,因为在二级索引的叶子节点包含了引用行的主键列。

尽可能按主键顺序插入数据,并且尽可能地使用单调增加的聚簇键的值来插入新行。

覆盖索引

在extra列可以看到using index的信息。

使用索引扫描来做排序

如果执行计划中的type列为index,说明使用了索引扫描排序。

排序有两种,通过排序操作,或者按索引顺序扫描。

应该避免创建重复索引,发现以后也应该立即移除。

未使用的索引应该删除。

索引和锁

索引可让查询锁定更少的行,从而提高并发性能。、

InnoDB只有在访问行的时候才会对其加锁,而索引可以减少引擎访问的行数,从而减少锁的数量。

5.1之后的版本中,服务器过滤掉行之后就会释放锁。

你可能感兴趣的:(创建高性能的索引笔记)