2013-01-25 137 views
2

我遇到了限制SQL查詢的問題。我正在使用SQL 2000,所以我不能使用像ROW_NUMBER(),CTE OR OFFSET_ROW FETCH這樣的函數。SQL限制查詢

我試過Select TOP limit * FROM的方法並排除已經顯示的結果,但這種方式查詢是如此之慢,因爲有時我的結果查詢獲取超過10000條記錄。

而且我曾嘗試以下方法:在這裏

SELECT * FROM (
SELECT DISTINCT TOP 100 PERCENT i.name, i.location, i.image , 
(SELECT count(DISTINCT i.id) FROM image WHERE i.id<= im.id) AS recordnum 
FROM images AS im 
order by im.location asc, im.name asc) as tmp 
WHERE recordnum between 5 AND 15 

同樣的問題,再加上的問題,因爲我不能在子查詢的記錄添加訂購選項微米。我已經將這兩個解決方案放在存儲過程中,但仍然執行查詢仍然很慢。

所以我的問題是: 是否有一種有效的方法來限制查詢,以便在SQL 2000中爲每個頁面提取20個記錄以獲得大量數據,即超過10000?

謝謝。

+0

10000條記錄不應該有顯著量(當然不是「大」),檢查你的索引。如果分頁問題也考慮使用遊標。 –

+0

表中有多少數據?行數? – UnhandledExcepSean

+0

圖像表有超過13萬000記錄:)有時添加過濾器我拉大約40 000條記錄 – sirenka

回答

0

現在,子查詢只運行一次
其中im2.id爲null,將跳過第40行

SELECT top 25 im1.* 
FROM images im1 
left join (select top 40 id from images order by id) im2 
on im1.id = im2.id 
where im2.id is null 
order by im1.id 
0

查詢式的,沒有很好的表現方式。如果性能至關重要,並且數據將始終按照相同的順序進行分組/排序,則可以添加一個int列,並根據分組/排序通過觸發器設置該值。索引它,它應該是非常快的讀取;寫入會慢一點。

另外,請確保在圖像和圖像上的Id列上有索引。