gpt4 book ai didi

sql - Quick SELECT 有时会超时

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

我有执行简单选择的存储过程。任何时候我手动运行它,它都会在秒下运行。但是在生产中(SQL Azure S2 数据库),它每 12 个我们的计划任务内运行一次 - 所以我认为期望它每次都以“冷”运行是合理的 - 没有缓存数据。而且性能非常难以预测 - 有时需要 5 秒,有时需要 30 秒,有时甚至需要 100 秒。

选择被优化到最大(无论如何,据我所知)- 我创建了过滤索引,包括从 SELECT 返回的所有列,因此执行计划中唯一的操作是索引扫描。估计行数和实际行数之间存在巨大差异:

enter image description here

但总的来说,查询看起来非常轻量级。我不责怪环境 (SQL Azure),因为一直有很多查询在执行,而这个是唯一一个有这个性能问题的查询。

这是 SQL 忍者愿意提供帮助的 XML 执行计划:http://pastebin.com/u5GCz0vW

编辑:

表结构:

CREATE TABLE [myproject].[Purchase](
[Id] [int] IDENTITY(1,1) NOT NULL,
[ProductId] [nvarchar](50) NOT NULL,
[DeviceId] [nvarchar](255) NOT NULL,
[UserId] [nvarchar](255) NOT NULL,
[Receipt] [nvarchar](max) NULL,
[AppVersion] [nvarchar](50) NOT NULL,
[OSType] [tinyint] NOT NULL,
[IP] [nchar](15) NOT NULL,
[CreatedOn] [datetime] NOT NULL,
[ValidationState] [smallint] NOT NULL,
[ValidationInfo] [nvarchar](max) NULL,
[ValidationError] [nvarchar](max) NULL,
[ValidatedOn] [datetime] NULL,
[PurchaseId] [nvarchar](255) NULL,
[PurchaseDate] [datetime] NULL,
[ExpirationDate] [datetime] NULL,
CONSTRAINT [PK_Purchase] PRIMARY KEY CLUSTERED
(
[Id] ASC
)

索引定义:

CREATE NONCLUSTERED INDEX [IX_AndroidRevalidationTargets3] ON [myproject].[Purchase]
(
[ExpirationDate] ASC,
[ValidatedOn] ASC
)
INCLUDE ( [ProductId],
[DeviceId],
[UserId],
[Receipt],
[AppVersion],
[OSType],
[IP],
[CreatedOn],
[ValidationState],
[ValidationInfo],
[ValidationError],
[PurchaseId],
[PurchaseDate])
WHERE ([OSType]=(1) AND [ProductId] IS NOT NULL AND [ProductId]<>'trial' AND ([ValidationState] IN ((1), (0), (-2))))

数据可以被认为是敏感的,所以我不能提供样本。

最佳答案

由于您的查询仅返回 1 个匹配项,我认为您应该将索引缩减到最低限度。您可以通过聚集索引中的键查找获取剩余的列:

CREATE NONCLUSTERED INDEX [IX_AndroidRevalidationTargets3] ON [myproject].[Purchase]
(
[ExpirationDate] ASC,
[ValidatedOn] ASC
)
WHERE ([OSType]=(1) AND [ProductId] IS NOT NULL AND [ProductId]<>'trial' AND ([ValidationState] IN ((1), (0), (-2))))

这并没有消除扫描,但它使索引更精简以便快速读取。

编辑: OP 声明精简索引被 SQL Server 忽略。您可以强制 SQL Server 使用过滤器索引:

SELECT *
FROM [myproject].[Purchase] WITH (INDEX(IX_AndroidRevalidationTargets3))

关于sql - Quick SELECT 有时会超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31069237/

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