gpt4 book ai didi

sql - 有什么办法可以用范围谓词停止索引搜索?

转载 作者:行者123 更新时间:2023-12-04 14:14:56 24 4
gpt4 key购买 nike

SQL Server 2008 R2

我将两个大表相互连接.. 查询看起来像:

SELECT ...
FROM Parent p
INNER JOIN Child c ON c.ID = p.ID
<further joins>
WHERE p.ID IN (9558207665, 9558213992, 9558245267, 9558291779, 9558403049)

两个表在 ID 上都有聚集索引。

查询计划正在创建聚集索引查找(在子表上,很有趣),但使用了从 9558207665 到 9558403049 的范围谓词。这会导致读取 400,000 多条记录,因为子表对于给定 ID 有多个记录.这导致了一个问题,尤其是当我指定了我想要的实际 5 个 ID 时。

我能够让它不这样做的唯一方法是创建一个带有 5 个 ID 的表变量,并将其用作初始 FROM 表,并链接到它。

我知道,出于某种原因,统计数据表明范围会比单个查找更快,但是由于这最终是错误的选择,是否有其他方法可以强制搜索进行单个查找?

最佳答案

在处理大表时,使用小的相关范围连接,有时需要添加看似多余的过滤器。

SELECT ...
FROM Parent p
INNER JOIN Child c ON c.ID = p.ID
<further joins>
WHERE p.ID IN (9558207665, 9558213992, 9558245267, 9558291779, 9558403049)
AND c.ID IN (9558207665, 9558213992, 9558245267, 9558291779, 9558403049)

关于sql - 有什么办法可以用范围谓词停止索引搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38020637/

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