gpt4 book ai didi

sql - TOP 性能问题

转载 作者:行者123 更新时间:2023-12-03 22:44:40 25 4
gpt4 key购买 nike

我有这个查询,实际上它与此类似,这是用于测试目的:

SELECT
[Distinct1].[ProspectID] AS [ProspectID]
FROM ( SELECT DISTINCT
[Limit1].[ProspectID] AS [ProspectID]
FROM ( SELECT TOP 10
[Extent1].[ProspectID] AS [ProspectID]
FROM [sqlsolvent].[crm_SearchTable] AS [Extent1]
WHERE ([Extent1].[CP_Name] LIKE '%dsd%' ESCAPE N'~')
) AS [Limit1]
) AS [Distinct1]

这是它的执行计划:

enter image description here

当我删除 TOP 10从查询我得到这个执行计划:

enter image description here

没有 TOP 10 的第二个执行计划快了 2 倍,有人能解释为什么 TOP 改变执行计划这么多,为什么它这么慢吗?即使查询不返回任何结果也是一样的,不应该只将 top 应用于结果集,为什么当查询不返回任何内容时它对性能有如此大的影响?

最佳答案

请注意,您的查询中有错误 - top必须与一些显式排序一起使用,否则结果的排序未定义,因此 top 的结果本身是未定义的。

我不能肯定地告诉你发生了什么,但是强加明确的排序可能会让你的结果更有意义 - 要么它允许一个更合理的执行计划,要么它会让你的“top-less”查询变慢。

在任何情况下,您都是在执行不同的操作之前强加排序和限制。虽然您的无顶查询可以使用索引来执行 distinct (在整个 table 上),当您使用 top 时,这些将不再可用,特别是因为您的过滤器不允许使用任何索引(like '%whatever%' 是降低性能的好方法:))。由于您是 distinct ing by 是聚集索引,distinct实际上非常便宜——只要你能使用那个索引。

总而言之,我想看看这两个查询如何处理更多数据。随着大量真实数据的出现,放缓很可能会变成加速——很难猜测这些事情:)

关于sql - TOP 性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35862779/

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