美文网首页
mysql联合索引字段顺序

mysql联合索引字段顺序

作者: 秋元_92a3 | 来源:发表于2022-04-14 18:02 被阅读0次

    原始sql

    SELECT COUNT(1) FROM fp_pile_order.t_pile_order WHERE f_yn = 1 AND f_start_time >= '2022-04-07 00:00:00' AND f_start_time <= '2022-04-14 23:59:59' AND f_operator_code = '00000';
    

    他的执行计划

    image.jpeg

    可见,这个sql执行过程是被命中索引了的,索引如下

    create index idx_order_startime_operator on t_pile_order (f_start_time, f_operator_code);
    

    这个索引创建的稍微有点问题,在查询筛选中,如果用到了范围查询,在创建联合索引的时候,应该尽量把需要范围查询的字段放在最后

    在上面创建的索引中,首先命中 f_start_time 字段索引,由于他是当前联合索引的第一个字段,那么他就不会在去走索引的第二个字段了;

    他的执行过程是先通过索引查询出符合时间范围的数据,由引擎返回给服务器,然后服务器再执行where条件筛选,故在extra中出现了 using where

    为了解决这个问题,创建这个索引的过程应该是本着让索引命中更多列的原则,把startTime字段放在联合索引的最后,优化后的索引如下:

    ALTER TABLE `fp_pile_order`.`t_pile_order` ADD INDEX `idx_foperatorcode_fyn_fstarttime` (`f_operator_code`, `f_yn`, `f_start_time`)
    

    相关文章

      网友评论

          本文标题:mysql联合索引字段顺序

          本文链接:https://www.haomeiwen.com/subject/gexxertx.html