0
点赞
收藏
分享

微信扫一扫

面试官请不要再问我mysql联合索引失效、有效情况了

版本:5.5.18.1

面试官请不要再问我mysql联合索引失效、有效情况了_数据库优化

联合索引建立情况:

面试官请不要再问我mysql联合索引失效、有效情况了_mysql_02

查询条件顺序和联合索引一样

EXPLAIN SELECT * FROM t_cmp_mission WHERE companyID = "" AND isFinish ="" AND missionType ="" AND creTm = "";

面试官请不要再问我mysql联合索引失效、有效情况了_mysql_03

查询条件顺序和联合索引顺序完全相反

EXPLAIN SELECT * FROM t_cmp_mission WHERE creTm = "" AND missionType ="" AND isFinish =""  AND companyID = "" ;

面试官请不要再问我mysql联合索引失效、有效情况了_联合索引_04

查询条件中不包含索引的第一个

EXPLAIN SELECT * FROM t_cmp_mission WHERE isFinish ="4" and missionType ="4" AND creTm ="";

面试官请不要再问我mysql联合索引失效、有效情况了_mysql_05

查询条件只有联合索引的第一个索引

EXPLAIN SELECT * FROM t_cmp_mission WHERE companyID = "44";

面试官请不要再问我mysql联合索引失效、有效情况了_联合索引_06

只有联合索引的非第一个索引

EXPLAIN SELECT * FROM t_cmp_mission WHERE isFinish = "44";

面试官请不要再问我mysql联合索引失效、有效情况了_性能优化_07

非第一个索引列like

EXPLAIN SELECT * FROM t_cmp_mission WHERE companyID = "44" AND isFinish ="4" and missionType ="4" and creTm LIKE '%000%';

面试官请不要再问我mysql联合索引失效、有效情况了_数据库优化_08

第一个索引列like 且双边模糊匹配

EXPLAIN SELECT * FROM t_cmp_mission WHERE companyID LIKE '%000%' AND isFinish ="4" and missionType ="4" and creTm ="";

面试官请不要再问我mysql联合索引失效、有效情况了_数据库优化_09

非第一个索引列like 且双边模糊匹配

EXPLAIN SELECT * FROM t_cmp_mission WHERE  companyID ="" AND isFinish LIKE '%aa%' AND missionType ="4" and creTm ="";

面试官请不要再问我mysql联合索引失效、有效情况了_性能优化_10

第一个索引列like 且右边模糊匹配

EXPLAIN SELECT * FROM t_cmp_mission WHERE companyID LIKE '000%' AND isFinish ="4" and missionType ="4" and creTm ="";

面试官请不要再问我mysql联合索引失效、有效情况了_联合索引_11

第一个索引列like 且左边模糊匹配

EXPLAIN SELECT * FROM t_cmp_mission WHERE companyID LIKE '%000' AND isFinish ="4" and missionType ="4" and creTm ="";

面试官请不要再问我mysql联合索引失效、有效情况了_性能优化_12

查询条件中包含 or

EXPLAIN SELECT * FROM t_cmp_mission WHERE companyID ="someID" OR isFinish ="4" and missionType ="4" and creTm ="";

面试官请不要再问我mysql联合索引失效、有效情况了_数据库优化_13

联合索引遇上 where 1=1

EXPLAIN SELECT * FROM t_cmp_mission WHERE 1=1 AND companyID ="someID" AND isFinish ="4" and missionType ="4" and creTm ="";

面试官请不要再问我mysql联合索引失效、有效情况了_联合索引_14

总结

  1. 联合索引所有成员均以and 出现时与顺序无关,都能生效
  2. 条件语句中出现or 则联合索引无效
  3. 条件语句中缺少排在第一位的索引字段,整个联合索引失效
  4. 欲使联合索引要生效,排在第一位的索引为必须出现,位置不限
  5. 使用like 不一定会导致索引失效,只有like 使用在第一位的索引为且左边做了模糊匹配才会使索引失效
  6. 或许是因为mysql内部做了优化,where 1=1并不影响索引的使用,不会扫描全表


举报

相关推荐

0 条评论