在SQL Server 2012版本11.0.5058我喜欢这个SQL Server 2012的ROW_NUMBER ASC DESC性能
SELECT TOP 30
row_number() OVER (ORDER BY SequentialNumber ASC) AS [row_number],
o.Oid, StopAzioni
FROM
tmpTestPerf O
INNER JOIN
Stati s on O.Stato = s.Oid
WHERE
StopAzioni = 0
- 查询当我使用
ORDER BY SequentialNumber ASC
需要400毫秒 - 当我使用
ORDER BY DESC
在ROW_NUMBER函数只需要2毫秒
(这是在测试环境中,在生产中是7000,7秒对15毫秒!)
分析执行计划,我发现这两个查询都是一样的。有趣的区别是,在较慢它与由stopazioni = 0
条件过滤所有行,117K行
在它仅使用53行
上有tmpTestPerf
查询和索引的主键快序列号列上的ASC密钥。
如何解释?
问候。 丹尼尔
这是tmpTestPerfQuery和为static查询的脚本与他们的指标
CREATE TABLE [dbo].[tmpTestPerf]
(
[Oid] [uniqueidentifier] NOT NULL,
[SequentialNumber] [bigint] NOT NULL,
[Anagrafica] [uniqueidentifier] NULL,
[Stato] [uniqueidentifier] NULL,
CONSTRAINT [PK_tmpTestPerf]
PRIMARY KEY CLUSTERED ([Oid] ASC)
)
CREATE NONCLUSTERED INDEX [IX_2]
ON [dbo].[tmpTestPerf]([SequentialNumber] ASC)
CREATE TABLE [dbo].[Stati]
(
[Oid] [uniqueidentifier] ROWGUIDCOL NOT NULL,
[Descrizione] [nvarchar](100) NULL,
[StopAzioni] [bit] NOT NULL
CONSTRAINT [PK_Stati]
PRIMARY KEY CLUSTERED ([Oid] ASC)
) ON [PRIMARY]
CREATE NONCLUSTERED INDEX [iStopAzioni_Stati]
ON [dbo].[Stati]([StopAzioni] ASC)
GO
没有 “的SQL Server 2012 R2” 版本 - 修正它只是 “SQL Server 2012的” ... – 2014-10-17 10:41:45
是的,对不起,是2012 SP2 – DBO 2014-10-17 13:45:19
是否有2个表之间的'外国KEY'约束? – 2014-10-22 10:01:25