美文网首页
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联合索引字段顺序

    原始sql 他的执行计划 可见,这个sql执行过程是被命中索引了的,索引如下 这个索引创建的稍微有点问题,在查询筛...

  • MySQL 多列索引

    MySQL 多列索引 多列索引也叫联合索引又叫复合索引也就是把多个字段按顺序连起来创建一个索引 ( 最多16列 ...

  • innodb联合索引

    1.联合索引遵从最左匹配原则,但是mysql对于条件字段会优化顺序 用到index(class, age)sele...

  • mysql索引的最左前缀原则

    联合索引有一个最左前缀原则,所以建立联合索引的时候,这个联合索引的字段顺序非常重要下面写了例子说明这个: 以上表结...

  • MySQL(Mariadb)总结4 - MySQL 索引和exp

    MySQL中的索引 基本法则:索引应该构建在被用作查询条件的字段. 索引的类型: B+ Tree索引: 顺序存储,...

  • MySQL索引最左前缀

    MySQL中的索引可以以一定顺序引用多个列,这种索引叫做联合索引,一般的,一个联合索引是一个有序元组,其中各个元素...

  • MongoDB索引

    1. 单字段索引 对普通字段创建索引 对内嵌的文档字段创建索引 2. 复合索引 复合索引的字段顺序、字段的升降序对...

  • 联合索引-以及如何使用索引

    联合索引 建立索引的时候,尽量建立联合索引,即多个字段组成1个索引。因为如果针对单个字段建立索引的话,会造成索引过...

  • mysql组合索引与字段顺序

    很多时候,我们在mysql中创建了索引,但是某些查询还是很慢,根本就没有使用到索引! 一般来说,可能是某些字段没有...

  • mysql索引

    表结构 联合索引 以下3种情况索引全部生效:说明只要有最左匹配列,索引都能生效,且不受顺序影响,mysql自动优化...

网友评论

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

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