gpt4 book ai didi

sql-server - 当 where 子句中使用的索引列具有特定值时,Azure sql 查询速度很慢

转载 作者:行者123 更新时间:2023-12-02 06:50:05 26 4
gpt4 key购买 nike

实例:Azure SQL S2 实例我们有一个候选人表,其中约有 170 万条记录。候选人表根据非主键 AccountID 建立索引。 AccountID:646 有 80K 行,AccountID:10 有 365K 行。

当我们触发时,从表中选择 top(10),其中 non_pk_indexed_col=int

Select top(10) from candidates where accountid=10

查询完成时所用时间为00:00:00

Select top(10) from candidates where accountid=646

,查询完成,耗时01:45:00

为什么相同的查询在值不同的情况下会花费这么长时间

最佳答案

很可能您会得到这两个参数非常不同的查询计划。因此,其中一个的性能明显优于另一个。一种检查方法是获取您的实际执行计划并进行检查。

您可以通过按 SSMS 中的“包括实际执行计划”按钮(“执行”按钮左侧大约七个)https://msdn.microsoft.com/en-us/library/ms189562.aspx 来实现此目的。

正如尼尔所说,传统上你会通过更新统计数据来修复糟糕的执行计划。您将希望使用全扫描进行更新,但为了获得最佳结果,您可以通过运行以下查询来做到这一点:

DECLARE @sql nvarchar(MAX);
SELECT @sql = (SELECT 'UPDATE STATISTICS [' + DB_NAME() + '].[' + rtrim(sc.name) + '].[' + rtrim(so.name) + '] WITH FULLSCAN, ALL; '
from sys.sysobjects so
join sys.schemas sc
on so.uid = sc.schema_id
where so.xtype = 'U'
FOR XML PATH(''), TYPE).value('.', 'nvarchar(MAX)');
PRINT @sql
EXEC (@sql)

希望对您有所帮助!

关于sql-server - 当 where 子句中使用的索引列具有特定值时,Azure sql 查询速度很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35934009/

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