sql语句优化id排序影响索引正确选择

数据库版本:5.7

数据一共:

2247005

sql语句:


FROM
  xxxx_price_info t 
WHERE
  t.tenant_id = 800069
  AND t.xxxx_price_state in (0, 1, 2)
  AND t.xxxx_price_type in (1, 5)
  AND t.xxxx_price_apply_time >= '2023-10-25 00:00:00'
  AND '2023-11-23 23:59:59.999' >= t.xxxx_price_apply_time
  AND (
    CONCAT(SUBSTR(t.adcode, 1, 4), '00') in ('650400', '361100', '330600', '420600', '420200')
    or t.adcode in ('650400', '361100', '330600', '420600', '420200')
  )
ORDER BY
  t.id DESC
limit
  0, 10

添加这个索引:


 (`tenant_id`, `xxxx_price_type`, `xxxx_price_state`, `xxxx_price_apply_time`, `adcode`);

优化起没选择这个索引,走了主键查询,用时14秒,虽然强制使用索引,也可以使用这个索引, 但是需要修改索引。 优化器没选择这个索引,
是任务走主键可以减少排序,并且只limit 10行数据。 添加下一个索引, 加上id。让索引有排序字段。

添加这个索引:

(`tenant_id` ,id,`xxxx_price_type`, `xxxx_price_state`, `xxxx_price_apply_time`, `adcode`);

优化器选择了 添加的索引,没走主键查询。用时 200毫秒

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值