gpt4 book ai didi

sql - 为什么对我的聚集索引进行扫描?

转载 作者:行者123 更新时间:2023-12-02 03:26:52 25 4
gpt4 key购买 nike

SQL 2000
NED 表有一个到 SIGN 表的外键 NED.RowID 到 SIGN.RowID
SIGN 表有一个到 NED 表 SIGN.SignID 到 NED.SignID 的外键
RowID 和 SignID 是 GUID 的聚集主键(不是我的选择)
WHERE 子句是:

FROM
[SIGN] A
INNER JOIN NED N ON A.SIGNID = N.SIGNID
INNER JOIN Wizard S ON A.WizardID = S.WizardID
INNER JOIN [Level] SL ON N.LevelID = SL.LevelID
LEFT JOIN Driver DSL ON SL.LevelID = DSL.LevelID
AND DSL.fsDeptID = @fsDeptID
INNER JOIN [Character] ET ON S.CharacterID = ET.CharacterID
INNER JOIN Town DS ON A.TownID = DS.TownID
WHERE
(A.DeptID = @DeptID OR
S.DeptID = @DeptID
AND
A.[EndTime] > @StartDateTime AND A.[StartTime] < @EndDateTime
AND
A.NEDStatusID = 2

为什么此查询的 SIGN 表上有 INDEX SCAN?什么会导致聚集索引上的索引扫描?谢谢

最佳答案

聚集索引扫描是 SQL Server 在具有聚集索引的表上指定全表扫描的方式。这是因为 SIGN 表上没有足够的索引来满足 WHERE 子句,或者因为它决定 SIGN 表足够小(或索引选择性不够),表扫描会更有效。

仅通过检查查询,您可能必须对 DeptID 列以及 StartTime、EndTime 和 NEDStatusID 的某种组合建立索引,以避免表扫描。如果您询问的原因是遇到性能问题,您还可以运行索引调优向导(现在是 SQL2005+ 客户端工具中的数据库引擎调优顾问),并让它提供一些有关创建哪些索引以加快速度的建议提出您的查询。

关于sql - 为什么对我的聚集索引进行扫描?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1161303/

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