mysql里的组合索引

大家好,今天咱们来聊聊MySQL里的组合索引。其实说白了,组合索引就是一次性把好几个列的信息打包在一块儿。比如说咱们要给一个叫t6的表加上个no_name_department_index的索引,里面就放了t_no、t_name、t_department_id这三个字段。这么一来,以后查询的时候效率就蹭蹭往上涨了。 咱们先把这张表给建了,CREATE TABLE这几个字一出,表结构就出来了。里面的每个字段也都按照规定的格式设好了,比如t_no用的是VARCHAR类型,还要NOT NULL,DEFAULT还得给个空字符串。还有个特别关键的东西叫INDEX,把这三个字段按顺序捆在一起放在了索引里。 接下来重点来了,MySQL查数据的时候有个规矩叫最左匹配原则。什么意思呢?就是说查询条件得从左往右一个接一个地对上号才行。比如说你要查t_no和t_name这两个字段的数据,那系统就会先找t_no的部分索引。要是碰上那种范围查询,比如用大于号或者BETWEEN这些条件,或者是以%开头的模糊查找,那系统查着查着就会停下来不走了。 给大家看个图就明白多了。通过EXPLAIN命令一看效果,左边的几个图就很清楚了:单独查t_no的速度最快;把t_no和t_name放一块儿查也很快;全列都查的话效率最高。但是如果你把t_no给跳过了只查t_name,或者只查最后面的t_department_id,这时候索引就完全不管用了。 最后再总结一下:组合索引里的字段是按顺序存的;你写的查询条件也是从左往右排着队查的;只要中间碰到范围查询或者通配符这一类的情况,后面那些字段直接就被“跳过”了。只要按这个思路去写SQL代码,就能把组合索引的威力给真正发挥出来啦。