Mysql联合索引最左匹配原则、原理 - 面试宝典

举报
皮牙子抓饭 发表于 2023/07/27 10:22:23 2023/07/27
【摘要】 ​根据Mysql联合索引最左匹配原则,联合索引的最左前缀会优先被使用,如果查询条件中只使用了联合索引的一部分,那么索引的后面部分将不会被使用。 示例代码如下: 首先,我们创建一个示例表:sqlCopy codeCREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(100) NOT NULL,...

根据Mysql联合索引最左匹配原则,联合索引的最左前缀会优先被使用,如果查询条件中只使用了联合索引的一部分,那么索引的后面部分将不会被使用。 示例代码如下: 首先,我们创建一个示例表:

sqlCopy codeCREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `age` int(11) NOT NULL,
  `city` varchar(100) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_name_age_city` (`name`,`age`,`city`)
) ENGINE=InnoDB;

然后,我们向表中插入一些数据:

sqlCopy codeINSERT INTO `users` (`name`, `age`, `city`) VALUES
('Tom', 20, 'Beijing'),
('Jerry', 25, 'Shanghai'),
('Alice', 30, 'Guangzhou'),
('Bob', 35, 'Beijing'),
('John', 40, 'Shanghai');

接下来,我们可以通过以下示例代码来进行查询:

  1. 使用联合索引的第一个字段进行查询:
sqlCopy codeEXPLAIN SELECT * FROM `users` WHERE `name` = 'Tom';

结果显示,查询将使用联合索引 ​​idx_name_age_city​​ 的第一个字段 ​​name​​。 2. 使用联合索引的前两个字段进行查询:

sqlCopy codeEXPLAIN SELECT * FROM `users` WHERE `name` = 'Tom' AND `age` = 20;

结果显示,查询将使用联合索引 ​​idx_name_age_city​​ 的前两个字段 ​​name​​ 和 ​​age​​。 3. 使用联合索引的所有字段进行查询:

sqlCopy codeEXPLAIN SELECT * FROM `users` WHERE `name` = 'Tom' AND `age` = 20 AND `city` = 'Beijing';

结果显示,查询将使用联合索引 ​​idx_name_age_city​​ 的所有字段。 需要注意的是,如果查询条件中只使用了联合索引的一部分,那么索引的后面部分将不会被使用。如果查询条件中的某个字段没有在联合索引中包含,那么该字段将无法使用索引优化查询。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。