【 使用环境 】生产
【 OB or 其他组件 】
【 使用版本 】4.2.18
【问题描述】清晰明确描述问题
为何不同的查询值,会影响索引是否匹配呢?
ddl:
CREATE TABLE t_edm_xflow
(
id
bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘id’,
goods_id
varchar(100) DEFAULT NULL COMMENT ‘商品id’,
promotion_code
varchar(100) DEFAULT NULL COMMENT ‘引流位’,
order_no
varchar(100) DEFAULT NULL COMMENT ‘订单号’,
uid
varchar(100) DEFAULT NULL COMMENT ‘uid’,
experiment_code
varchar(100) DEFAULT NULL COMMENT ‘实验组code’,
experiment_name
varchar(100) DEFAULT NULL COMMENT ‘实验组名称’,
rule_code
varchar(100) DEFAULT NULL COMMENT ‘rule_code’,
action
varchar(100) DEFAULT NULL COMMENT ‘事件’,
creator
varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT ‘SYSTEM’ COMMENT ‘创建者’,
modifier
varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT ‘SYSTEM’ COMMENT ‘修改者’,
gmt_created
datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT ‘创建时间’,
gmt_modified
datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT ‘修改时间’,
is_deleted
char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT ‘N’ COMMENT ‘是否删除 Y:是 N:否’,
json
text DEFAULT NULL COMMENT ‘消息体’,
action_time
datetime DEFAULT NULL,
env
varchar(100) DEFAULT NULL COMMENT ‘环境’,
pay_way
varchar(100) DEFAULT NULL COMMENT ‘支付渠道’,
business_type
int(11) DEFAULT NULL COMMENT ‘订单类型’,
uw_date
datetime DEFAULT NULL,
pay_chain_id
bigint(20) DEFAULT NULL COMMENT ‘支付链路id’,
pay_chain
varchar(32) DEFAULT NULL COMMENT ‘支付链路’,
PRIMARY KEY (id
),
KEY t_edm_xflow_goods_id_uw_date_IDX
(goods_id
, pay_chain
, uw_date
)
) AUTO_INCREMENT = 5931856 DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC;
情况1:
sql:explain select distinct uw_date from t_edm_xflow where goods_id=‘2019024’ and uw_date >=‘2025-04-01’ and uw_date <= ‘2025-04-30’ and pay_chain = ‘cashier_h’ and is_deleted=‘N’
可见,使用了索引
情况2:
explain select distinct uw_date from t_edm_xflow where goods_id=‘2019024’ and uw_date >=‘2025-04-01’ and uw_date <= ‘2025-04-30’ and pay_chain = ‘cashier_h5’ and is_deleted=‘N’
返回:
|1 |└─TABLE FULL SCAN|t_edm_xflow|7118 |550245 |
可见,未使用索引。
情况1和情况2 唯一区别是pay_chain的值不同,请问pay_chain的值为何会影响索引的匹配呢?(表是有数据的,并且存在满足情况2pay_chain='cashier_h5’的数据,无情况1pay_chain='cashier_h’的数据)