gpt4 book ai didi

mysql - MySQL如何使用多字段索引进行中间索引字段为OR的查询?

转载 作者:行者123 更新时间:2023-11-29 17:22:11 25 4
gpt4 key购买 nike

我有 InnoDB 表项目,具有多列非唯一索引(group_id、type_id、expiry_date)。

查询时
SELECT * FROM Items WHERE group_id = 1 AND type_id IN (1,2,3) AND expiry_date BETWEEN '2017-01-01' AND '2018-01-01'

索引是否可以正常工作,因为我使用 IN 作为索引的第二个字段,并且它们还具有第三个意志的范围,或者我应该从吐出它中受益?


SELECT * FROM Items WHERE group_id = 1 AND type_id = 1 AND expiry_date BETWEEN '2017-01-01' AND '2018-01-01' 之间
联盟
SELECT * FROM Items WHERE group_id = 1 AND type_id = 2 AND expiry_date BETWEEN '2017-01-01' AND '2018-01-01' 之间
联盟
SELECT * FROM Items WHERE group_id = 1 AND type_id = 3 AND expiry_date BETWEEN '2017-01-01' AND '2018-01-01' 之间

EXPLAIN 显示了两个查询的相同查询计划,但我有一个相当小的表用于测试,不确定查询优化器是否会以相同的方式处理大量数据。

对于索引中的 2 个后续字段使用 IN/OR/BETWEEN 的情况,索引通常如何工作?

最佳答案

对于第二个查询,请使用 union all 而不是 union。您总是希望union all,除非您想承担删除重复项的开销。

我猜您会从对较大数据的第二个查询中受益。我认为 MySQL 不支持对索引进行跳跃扫描,因此索引仅用于 group_idtype_id,但不能直接用于日期。

关于mysql - MySQL如何使用多字段索引进行中间索引字段为OR的查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51189481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com