本文已参与「新人创作礼」活动,一起开启掘金创作之路。
索引原则
这篇文章讲解索引遵循的原则,以及索引什么时候失效等等。
最左前缀原则
如果是联合索引,那么必须遵守最左前缀法测。
最左前缀法则指的是根据联合索引进行查询时,该联合索引从左往右的列必须存在。如果跳跃某一列,联合索引将部分失效(跳过某一列后开始失效)。
- 如果某一列出现范围索引(即><,改为>=则可以正常运作),则某一列后索引失效
索引失效的情况
- 以“%”开头的like语句,索引无效,后缀“%”不影响
- or语句前后没有同时使用索引
- 如果列类型是字符串,一定要在条件中将数据用引号引用,否则失效(隐式转换)
- 如果mysql估计使用全表扫描比索引快,则不用索引(键值少,重复数据多)
- 组合索引要遵守最左前缀原则
- 在索引字段上使用not,<>,!=(对它处理是全表扫描)
- 对索引字段进行计算、或者函数也会失效
- is null(具体看字段的分布情况)
覆盖索引
尽量使用覆盖索引,覆盖索引是指凭借该索引可以直接提供查询结果,不需要回表的过程称为覆盖索引
由于覆盖索引可以减少树的搜索次数,显著提升查询性能,所以使用覆盖索引是一个常用的性能优化手段。
如何判断是否回表?依旧是explain语句, 通过extra字段看出
索引下推
索引下推是MySQL5.6以后出现的
在根据索引查询过程中就根据查询条件过滤掉一些记录,减少最后的回表操作。