hudeya 发表于 2018-10-9 08:13:49

关于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'; 没有用到索引
  遵循了联合索引最左优先的原则。

页: [1]
查看完整版本: 关于mysql联合索引