MySQL解释单列索引和联合索引以及注意事项 最左前缀原则

原创 木鱼  2017-09-29 07:30  阅读 1,183 次

索引, 就像是一本书的目录, 能让我们更快的找到想要的结果

  

索引可以说是一个项目中,成本最低效果最明显的优化方式

MySQL解释单列索引和联合索引以及注意事项 最左前缀原则 MySQL 第1张

 

我们今天着重说一下单列索引和联合索引(复合索引)

 

假设我们一个表"info", 他有三个字段, 分别是id, name, age

我们再假设这个表有10万条数据

 

然后我们查询一条数据

SELECT * FROM `info` WHERE id=100 AND name='xiaoming' AND age=18

如果不加索引的话...... 算了, 相信我, 没有人会不加索引

 

但是我们要怎么加这个索引呢? 是只给id字段加上一个索引呢, 还是分别都加上索引?

然后你会发现..

单独给id加索引的查询速度, 和分别给三个字段都加索引的查询速度没啥差别!

为什么多个单列索引查询, 速度会一样?

因为虽然我们有多个索引, 但是MySQL只会使用它认为最精准的最有效率的索引

注意, where条件的顺序不影响

联合索引

这时

我们可以使用联合索引

我们添加一个联合的普通索引

ALTER TABLE `info` ADD INDEX index_name(`id`, `name`, `age`)

当你再查询的时候, 你会发现他速度变快了!

我们改改查询语句

SELECT * FROM `info` WHERE id>100 AND name='xiaoming' AND age=18

我们把id的判断条件改成大于号了

 

查询速度又慢了

字段name和age根本没用到索引!

为什么?

最左前缀

这就要说MySQL的最左前缀原则了

假如, 我们的联合索引是(id, name, age)

MySQL只会从左到右的使用这个联合索引, 一个查询可以只使用部分索引, 但必须是最左侧部分!

比如(id, name, age), 会分成id, name, age | id, name | id 三种组合查找方式, 但是不支持 name, age

联合索引触发条件

1. where条件不是AND关系, 不触发联合索引

2. 当最左侧字段是常量引用时,索引就十分有效。

3. 遵循最左前缀原则

本文地址:https://www.m5yu.com/mysql-index.html
关注我们:请关注一下我们的微信公众号:扫描二维码,公众号:木鱼博客
版权声明:本文为原创文章,版权归 木鱼 所有,欢迎分享本文,转载请保留出处!
上一篇:已经是最后一篇了
下一篇:已经是最新一篇了
相关文章

发表评论


  1. 韭菜韭菜
    韭菜韭菜 【农民】 @回复

    太厉害啦!值得我们学习

  2. hnysnet
    hnysnet 【农民】 @回复

    你的网站风格我太喜欢了,好想把你的网站仿下来呀!不过这得问站长大大同意吗?感谢回访-www.hnysnet.com我觉得有几个地方还需要改进一下。