MysqlIN子句后面的时间范围查询到底能不能用到索引
经常在网上看到 “IN” 子句用不到索引,或者 “IN” 后面的字段用不到索引,这里做个简单的测试。
步骤如下:
一、准备资料
1.表定义
商品表:t_order
ID 商家ID(int) 店铺ID(int) 编码 名称 创建时间(datetime)
id
merchant_id
shop_id
code
name
create_time
索引:商家ID + 店铺ID + 创建时间
2.预置数据
方式:商家ID,店铺ID,创建时间 均匀分配预制数据,具体sql省略
二、测试
1.场景一
SQL
SELECT
*
FROM
t_order
WHERE
merchant_id = 136
AND shop_id IN ( 581, 583 );
EXPLAIN
- type为range,key_len为8个字节,扫描行 = 12
结论
IN可以用到range索引
2.场景二
SQL
SELECT
*
FROM
riv_outbound_notice_h t_order
WHERE
t_order.ONH_ORG_ID = 136
AND t_order.ONH_OWNER_ID IN ( 581, 583 )
AND t_order.CREATE_TIME BETWEEN "2019-11-19 00:00:00"
AND "2019-11-22 00:00:00";
EXPLAIN
- type = range,key_len = 13,扫描行 = 5
结论
IN后面的时间范围可以用到索引
以上是 MysqlIN子句后面的时间范围查询到底能不能用到索引 的全部内容, 来源链接: utcz.com/z/533912.html