关于mysql联合索引

Posted 张宇航

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于mysql联合索引相关的知识,希望对你有一定的参考价值。

1
2
3
4
5
6
7
CREATE TABLE `uniontest` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `menuname` varchar(50) DEFAULT NULL,
  `url` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `u_index` (`menuname`,`url`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8

  先建立数据库,把menuname和url设置为联合索引

需要注意的几点:

1、在插入数据的时候mysql 对menuname和url两列同时做了检查唯一性

如:

INSERT INTO uniontest(`menuname`,`url`) VALUES(‘订单管理‘,‘aaa.php‘)  成功

INSERT INTO uniontest(`menuname`,`url`) VALUES(‘订单管理‘,‘bbb.php‘)  成功

INSERT INTO uniontest(`menuname`,`url`) VALUES(‘订单管理2‘,‘aaa.php‘) 成功

INSERT INTO uniontest(`menuname`,`url`) VALUES(‘订单管理‘,‘aaa.php‘) 失败

2、在查询的时候

explain SELECT * FROM uniontest WHERE menuname = ‘订单管理‘   用到索引

explain SELECT * FROM uniontest WHERE menuname = ‘订单管理‘ AND url = ‘aaa.php‘;   用到索引

explain SELECT * FROM uniontest WHERE url = ‘aaa.php‘; 没有用到索引

遵循了联合索引最左优先的原则。

 

以上是关于关于mysql联合索引的主要内容,如果未能解决你的问题,请参考以下文章

Mysql索引优化简单介绍

关于MySql的知识点记录

关于mysql的多表联合模糊查询问题

深入理解mysql的联合索引

MySql知识体系总结(SQL优化篇)

mysql覆盖索引和联合索引的区别