gpt4 book ai didi

sql - 为只有一个匹配项的 Between 查询建立索引 SQL?

转载 作者:行者123 更新时间:2023-12-02 22:38:33 25 4
gpt4 key购买 nike

我们有一个包含超过 200 万行的表,其中针对该表的所有查询都将是使用 Column1Column2 的 Between 查找。而且,只有一种可能的结果。例如...

Col1     Col2
1 5
6 10
11 15

select * from table1 where 8 between Col1 and Col2

我目前在 Col1Col2 上有一个唯一的聚集索引。到目前为止,我无法弄清楚如何进一步调整查询和索引以最小化处理的行。执行计划当前报告在查找唯一正确答案时处理的近 0.5 行和 113k 行的成本。

我可能会忽略哪些选项?

根据要求,当前执行计划的一些详细信息:

Operation
Clustered Index Seek
Predicate
CONVERT_IMPLICIT(bigint,[@2],0)<=[Col2]
Seek Predicate
Seek Keys[1]: End: Col1 <= Scalar Operator(CONVERT_IMPLICIT(bigint,[@1],0))

最佳答案

范围总是不重叠的吗?你提到总是只有一场比赛。如果是的话,你可以写成:

SELECT * FROM table1 
WHERE 8 <= Col2
ORDER BY Col2 ASC
LIMIT 1

这将为您提供具有最低值 Col2 的行高于 8 - 这是您感兴趣的范围。仅在 Col2 上需要索引。 ,而且成本应该很小。

由于您没有提及您正在使用的 DBMS,因此LIMIT 1应替换为数据库用于获取前 N 个结果的任何内容。

您必须检查Col1 <= your_value代码中以确保您要查找的值确实在范围内。

关于sql - 为只有一个匹配项的 Between 查询建立索引 SQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12957781/

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