在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