gpt4 book ai didi

sql - 添加 WHERE 会使 SQL Azure 查询时间增加 20 秒以上

转载 作者:行者123 更新时间:2023-12-03 03:18:41 27 4
gpt4 key购买 nike

我正在寻找一些有关加快 SQL Azure 查询速度的建议。这是我们正在运行的两个查询的示例,当我们在其中添加 WHERE 子句时,查询就会停止。

时间和订单类型这两列均已建立索引。任何人都可以建议如何使这些运行得更快,或者对查询执行哪些操作以使其更高效?

5.2秒:

sum(cast(theTime AS INT)) as totalTime from Orders

20.2秒:

 sum(cast(theTime AS INT)) as totalTime from Orders WHERE orderType='something_in_here'
<小时/>

相关信息如下:

CREATE TABLE [dbo].[Orders] (
[ID] int IDENTITY(1,1) NOT NULL,
[orderType] nvarchar(90) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[orderTime] nvarchar(90) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

CONSTRAINT [PrimaryKey_fe2bdbea-c65a-0b85-1de9-87324cc29bff] PRIMARY KEY CLUSTERED ([ID])
WITH (IGNORE_DUP_KEY = OFF)
)
GO
CREATE NONCLUSTERED INDEX [orderTime]
ON [dbo].[Orders] ([orderTime] ASC)
WITH (IGNORE_DUP_KEY = OFF,
STATISTICS_NORECOMPUTE = OFF,
ONLINE = OFF)
GO
CREATE NONCLUSTERED INDEX [actiontime_int]


CREATE NONCLUSTERED INDEX [orderType]
ON [dbo].[Orders] ([orderType] ASC)
WITH (IGNORE_DUP_KEY = OFF,
STATISTICS_NORECOMPUTE = OFF,
ONLINE = OFF)
GO

最佳答案

我怀疑您的查询没有按照您的想法进行。它获取前一百万个计数,而不是前一百万行的计数。我想你想要:

select sum(cast(theTime AS INT))
from (select top (1000000) Orders
from Orders
) t

对比:

select sum(cast(theTime AS INT))
from (select top (1000000) Orders
from Orders
WHERE orderType='something_in_here'
) t

我怀疑使用索引实际上会减慢速度,具体取决于 where 子句的选择性。

在原始查询中,您正在按顺序读取所有数据。这很快,因为页面只是在处理器中循环。

浏览索引会减慢速度,因为页面不是按顺序读取的。您可能仍在阅读所有页面(如果每个页面都有匹配的行),但不再按“物理”或“逻辑”顺序读取它们。它们是按照索引的顺序读取的——这可能是随机的。

关于sql - 添加 WHERE 会使 SQL Azure 查询时间增加 20 秒以上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16611055/

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