MySQL只能使用定义索引的最左边部份

  

实验环境:MySQL 5.7.17

1,表结构如下,在id、名称、tx列建立主键

mysql>, show  create  table  txtx;   + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +   | |,Table  Create  Table ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, |   + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +   | |,txtx 还以为;CREATE  TABLE “txtx”, (   “id”才能,int (11), NOT 空,   “名字”,才能char (2), NOT 空,   tx的才能,char (3), NOT 空,   id1的才能,int (11), DEFAULT 空,   PRIMARY 才能;KEY  (“id”、“名称”,“tx”)   ),引擎=InnoDB  DEFAULT  CHARSET=gbk  |   + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +   1,row  set 拷贝;(0.00,sec)


2,查看执行计划

mysql>, explain  select  *,得到txtx  where  id=1,以及id1 =1,以及tx=皌x”;   + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - +   | |,id  select_type  |, table  |, partitions  |, type  |, possible_keys  |, key ,,,, |, key_len  |, ref ,, |, rows  |, filtered  |, Extra ,,,,, |   + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - +   |,,1,|,SIMPLE ,,,,, |, txtx , |, NULL ,,,,,, |, ref , |, PRIMARY ,,,,,, |, PRIMARY  |, 4,,,,,,, |, const  |,,,, 1, |,,,, 33.33, |, Using  where  |   + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - +   1,row 集,拷贝,1,warning  (0.00, sec)


从上面执行计划可以看的出,尽管查询在语在句中使用了id与tx列,但只使用了id列,原因是MySQL只能使用定义索引的最左边部分。


MySQL只能使用定义索引的最左边部份