索引可以用于减少需要扫描的记录数量,也可以用于排序和分组.
在使用索引来减少需要扫描的记录数量时,应该先找到使用该索引执行查询时对应的扫描区间和形成该扫描区间的边界条件,然后就可以扫描各个扫描区间中的记录。如果扫描的是二级索引记录,并且如果需要完整的用户记录,就需要根据获取到的每条二级索引记录的主键值执行回表操作。
在创建和使用索引时应注意下列事项·
- 只为用于搜索、排序或分组的列创建索引;
- 当列中不重复值的个数在总记录条数中的占比很大时 才为列建立索引 索引列的类型尽量小;
- 可以只为索引列前缀创建索引,以减小索引占用的存储空间 尽量使用覆盖索引进行查询,以避免因表操作带来的性能损耗;
- 让索引列以列名的形式单独出现在搜索条件中, 为了尽可能少地让聚簇索引发生页面分裂的情况 建议让主键拥有 AUTO_INCREMENT 属;
- 定位并删除表中的冗余和重复索引。
——《MySQL是怎样运行的》读书笔记