簡體   English   中英

SQL Select查詢與varchar(max)花費太多時間

[英]Sql select query with varchar (max) is taking too much time

我有一個這樣的SQL查詢:

with history as (select columnA,columnB,columnC,ROW_NUMBER() OVER (Partition by columnA ORDER BY columnD desc) as rownum from TableA )
select m.columnA,m.columnB,m.columnC from history as m where m.rownum=1

這大約需要5分鍾才能執行。 在嘗試了不同的東西之后,我發現是否不包括columnC(這是nvarchar(最大值)),我在2秒鍾內得到了結果。 但是我的結果需要這個columnC。

我想使此查詢運行得更快。 我只有一個到數據庫的只讀連接字符串,沒有修改表的權限。

我試圖像有人在stackoverflow中建議的那樣將數據放入分頁表中,但這沒有幫助。 我還嘗試限制我在分頁表中收到的columnC字符,但這些都不起作用:

Create Table #PagedTable (
 columnA nvarchar(255),
 columnB nvarchar(255),
 columnC nvarchar(1000),
 rownum int
);

with history as (select columnA,columnB,columnC,ROW_NUMBER() OVER (Partition by columnA ORDER BY columnD desc) as rownum from TableA )

Insert into
        #PagedTable
select m.columnA,m.columnB,m.columnC from history as m where m.rownum=1

Select * from #PagedTable

如何修改此查詢以使其運行更快? 這是針對sql azure服務器v12版本運行的,正如您在查詢中看到的那樣,我要執行的操作是對按columnA划分的行編號,並獲取每個類別中的第一行

編輯:添加更多信息:索引僅在columnA上。 該表大約有10000行,結果有2359行。

該版本需要多長時間才能運行?

select h.columna, h.columnb, h.columnc
from (select columna, max(columnd) as maxd
      from history h
      group by columna
     ) hh join
     history h
     on h.columna = hh.columna and h.columnd = hh.maxd;

假設您在history(columna, columnd)有一個索引history(columna, columnd)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM