mysql的联合索引(复合索引)的实现
联合索引
本文中联合索引的定义为(mysql):
?1 | alter table `table_name` add index (`col1`,`col2`,`col3`); |
联合索引的优点
若多个一条sql,需要多个用到两个条件
?1 | select * from `user_info` where username= 'xx' , password = 'xxxxxx' ; |
当索引在检索 password
字段的时候,数据量大大缩小,索引的命中率减小,增大了索引的效率。
符合索引的索引体积比单独索引的体积要小,而且只是一个索引树,相比单独列的索引要更加的节省时间复杂度和空间复杂度
联合索引命中的本质(最左匹配的理解)
定义
当创建(col1
,col2
,col3
)联合索引时,相当于创建了(col
)单列索引,(clo1
,clo2
)联合索引以及(col1
,col2
,col3
)联合索引想要索引生效,只能使用col1
和col1
,col2
和col1
,col2
,col3
三种组合;当然,col1
,col3
组合也可以,但实际上只用到了col1
的索引,col3
并没有用到!
图解
通俗理解
联合索引相当于一个按照姓氏——名字
的一个电话簿,只能先确定姓氏才可以命中索引,下列可以正确命中联合索引的语句( =
和in
直接的字段都可以乱序,mysql的查询优化器可以优化成索引识别的形式)
1 2 | -- 只命中 col1,col2 select * from `table_name` where `col1`= 'xx' ; |
1 2 3 | -- 命中col1,col2。col1,col2的顺序可以颠倒 select * from `table_name` where `clo1`= 'xx' ,`clo2`= 'xxx' ; select * from `table_name` where `clo2`= 'xxx' , `clo1`= 'xx' ; |
1 2 3 4 | -- 命中col1,col2,col3,同理,三个列的顺可以颠倒 select * from `table_name` where `col1`= 'x' ,`col2`= 'xx' ,`col3`= 'xxx' ; select * from `table_name` where `col1`= 'x' ,`col3`= 'xx' ,`col2`= 'xxx' ; select * from `table_name` where `col2`= 'x' ,`col3`= 'xx' ,`col1`= 'xxx' ; |
到此这篇关于mysql的联合索引(复合索引)的实现的文章就介绍到这了,更多相关mysql 联合索引 内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://www.cnblogs.com/wongdw/p/12887174.html
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。