gpt4 book ai didi

sql-server - SQL Server 2005 在索引扫描之前进行全表排序

转载 作者:行者123 更新时间:2023-12-02 16:53:36 25 4
gpt4 key购买 nike

我的 SQL Server 2005 数据库中的排序性能出现问题。假设我有以下查询:

select 
id, versionId, orderIndex
from Forms_Page
where
versionId = 'AFCF4921-31B4-44C1-B3A7-913910F7600E'
order by
orderIndex

此查询将返回 7 行,执行时间约为 23 秒。该查询的执行计划如下(还不能发布图像):

选择(成本:0%)->排序(成本:11%)->聚集索引扫描(成本:89%)

如果我删除“order by”子句,查询将在大约 4 毫秒内完成,如预期。

为什么 SQL Server 在获取请求的行之前要进行排序?这对我来说没有意义。为什么不先获取 7 行并仅对这些行进行排序?我是否缺少某些内容,例如数据库配置,或者这是预期的行为?

我可以使用内部选择,如下所示,强制引擎先获取行,然后排序,这将在大约 6 毫秒内返回行,但由于我们使用的是 EF,这不会是一个对我们来说这是一个很好的解决方案(我们可以在内存中对结果进行排序,但是我们对某些生成带有排序的 SQL 代码的实体使用 LoadWith 选项,并且该代码也遇到了相同的“order by”问题)。

select *
from(
select
id, versionId, orderIndex
from Forms_Page
where
versionId = 'AFCF4921-31B4-44C1-B3A7-913910F7600E'
) T
order by
T.orderIndex

我已经测试了一些索引是已排序的列,这固定了东西,但只是因为列已经排序了。看起来是一个笨拙的解决方案......

最佳答案

首先,我不知道为什么要这么做!话虽如此,这里有一些您可能已经尝试过的事情。

最后,也许与您的情况无关,但这里有一个很好的表格提示解释:http://blog.sqlauthority.com/2009/11/19/sql-server-understanding-table-hints-with-examples/

关于sql-server - SQL Server 2005 在索引扫描之前进行全表排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13492774/

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