面试题-什么是最左前缀法则?什么时候索引将失效?
如果索引了多列(联合索引),要遵守最左前缀法则。最左前缀法则指的是查询从索引的最左列开始, 并且不跳过索引中的列。如果跳跃某一列,索引将会部分失效(后面的字段索引失效)。
索引失效情况:
-
联合索引失效:即不符合最左前缀法则。注:与我们编写SQL时,条件编写的先后顺序无关
-
范围查询:联合索引中,出现范围查询(>,<),范围查询右侧的列索引失效。(当范围查询使用>= 或 <= 时,就能走联合索引,所以,在业务允许的情况下,尽可能的使用类似于 >= 或 <= 这类的范围查询,而避免使用 > 或 <)
-
索引列运算:不要在索引列上进行运算操作,否则索引将失效。
# 比如:当根据phone字段进行函数运算操作之后,索引失效 explain select * from tb_user where substring(phone,10,2) = '15';
-
字符串不加引号
-
like模糊查询:如果仅仅是尾部模糊匹配,索引不会失效。如果是头部模糊匹配,索引失效。
-
or连接条件:用or分割开的条件, 如果or前的条件中的列有索引,而后面的列中没有索引,那么涉及的索引都不会被用到。(当or连接的条件,左右两侧字段都有索引时,索引才会生效。)
-
数据分布影响:如果MySQL评估使用索引比全表更慢,则不使用索引。 因为索引是用来索引少量数据的,如果通过索引查询返回大批量的数据,则还不 如走全表扫描来的快,此时索引就会失效。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?