优秀的编程知识分享平台

网站首页 > 技术文章 正文

MySQL索引失效的情况1(mysql索引何时失效)

nanyue 2024-10-28 16:38:58 技术文章 38 ℃

MySQL索引失效的情况1.1 最左前缀法则如果存在联合索引,要遵守最左前缀法则。

即查询从索引的最左列开始,并且不跳过索引中的列,如果跳跃其中某一列,索引将会部分失效(后面的字段索引失效)。

假设在 tb_user 表中联合索引,

涉及三个字段,顺序为:

profession(索引长度为47),

age(索引长度为2),

status(索引长度为5)。

a) explain select * from tb_user where profession = '软件工程 ' and age = 31 and status='0';


b) explain select * from tb_user where profession = '软件工程 ' and age = 31 ;

c) explain select * from tb_user where profession = '软件工程‘;

以上的这三组测试中,我们发现只要联合索引最左边的字段profession存在,索引就会生效;

a) explain select * from tb_user where age = 31 and status='0';

b) explain select * from tb_user where status='0';?

以上的这两组测试中,我们发现只要联合索引最左边的字段?

profession不存在,索引并未生效;?

explain select * from tb_user where profession = '软件工程 ' and status='0';?

上述的一条SQL查询时,联合索引最左边的列profession字段是存在的,索引满足最左前缀法则的基本条件。

但是查询时,跳过了age这个列,所以后面的列索引是不会使用的,也就是索引部分生效,所以索引的长度为47;?

explain select * from tb_user where age = 31 and status='0'? and profession = '软件工程’;??

可以看到,索引长度54,完全满足最左前缀法则,联合索引生效。

?? 最左前缀法则中是指查询时,联合索引的最左边的字段(即第一个字段)必须存在,与编写sql时,条件编写的先后顺序无关。

最近发表
标签列表