服务器之家

服务器之家 > 正文

mysql的联合索引(复合索引)的实现

时间:2021-04-25 17:15     来源/作者:wongdw

联合索引

本文中联合索引的定义为(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)联合索引想要索引生效,只能使用col1col1,col2col1,col2,col3三种组合;当然,col1,col3组合也可以,但实际上只用到了col1的索引,col3并没有用到!

图解

mysql的联合索引(复合索引)的实现

通俗理解

联合索引相当于一个按照姓氏——名字的一个电话簿,只能先确定姓氏才可以命中索引,下列可以正确命中联合索引的语句( = 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

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
返回顶部