說,我有一些SELECT
聲明:查找行號,然後找到其鄰居
SELECT id, name FROM people
ORDER BY name ASC;
我在people
表中的幾百萬行和ORDER BY
子句可以是多比我在這裏顯示的更復雜(可能在十幾列上操作)。
我只檢索行的一小部分(比如行1..11),以便在UI中顯示它們。現在,我想解決以下問題:
- 找到給定
id
的行數。 - 顯示之前的5個項目以及連續給定的
id
後的5個項目。
一旦我解決了問題1,問題2很容易解決,因爲如果我知道我正在查找的項目在排序結果集中有行號1000
(這是火鳥SQL方言):
SELECT id, name FROM people
ORDER BY name ASC
ROWS 995 TO 1005;
我也知道,我可以通過計算所有一個我找前哪來行發現一排rank,但是這可能會導致很長的WHERE
條款與噸的OR
和AND
在條件。我必須反覆這樣做。使用我的測試數據,這需要幾百毫秒,即使使用正確索引的列,速度太慢。
是否有通過使用某些SQL:2003功能(例如Firebird 3.0支持的row_number
)來實現此目的的方法?我不是一個SQL大師,我需要一些指針。我可以創建一個緩存視圖,其結果將包括排名/密集排名/行索引?
太難以回答沒有關於UI類型的信息。網?桌面?命令行?語音UI ;-) – rstrelba
我正在顯示桌面應用程序中的人員列表;由於集合非常龐大,我只能獲取適合列表視口的人員的行。用戶有一個滾動條,允許她移動到列表中的任何一點,並使其刷新其內容,就好像它真的充滿了數百萬行。 –
視口過濾器中有多少附加參數? – rstrelba