сказать, что у меня есть некоторые SELECT
заявление:Найти номер строки в каком-то на основе идентификатора строки, а затем найти свои сосед
SELECT id, name FROM people
ORDER BY name ASC;
У меня есть несколько миллионов строк в people
таблице и оговорке ORDER BY
может быть много более сложный, чем то, что я показал здесь (возможно, работает на дюжине столбцов).
Я извлекаю только небольшое подмножество строк (например, строки 1..11), чтобы отображать их в пользовательском интерфейсе. Теперь я хотел бы решить следующие проблемы:
- Найти номер строки с заданным
id
. - Показать 5 предметов до и 5 предметов после строки с заданным
id
.
Задача 2 легко решить, как только я решил проблему 1, так как я могу после этого использовать что-то вроде этого, если я знаю, что этот пункт я искал имеет строки номер 1000
в отсортированном наборе результатов (это Firebird SQL диалект):
SELECT id, name FROM people
ORDER BY name ASC
ROWS 995 TO 1005;
Я также знаю, что я могу найти rank из строки путем подсчета всех строк, которые приходят к одному из них я искал, но это может привести к очень длинным WHERE
предложениям с тонн OR
и AND
в состоянии. И я должен делать это неоднократно. С моими тестовыми данными это занимает сотни миллисекунд, даже при использовании правильно проиндексированных столбцов, что слишком медленно.
Есть ли способ достичь этого, используя некоторые функции SQL: 2003 (например, row_number
, поддерживаемый Firebird 3.0)? Я никоим образом не являюсь гуру SQL, и мне нужны некоторые указатели. Могу ли я создать кешированный вид, в котором результат будет включать в себя индекс ранга/плотного ранга/строки?
слишком сложно ответить без информации о типе интерфейса. Веб? Desktop? Командная строка? Voice UI ;-) – rstrelba
Я показываю список людей в настольном приложении; поскольку коллекция огромна, я получаю только строки для лиц, которые вписываются в окно просмотра списка. Пользователь имеет полосу прокрутки, которая позволяет ей перемещаться в любую точку списка и обновлять ее содержимое, как если бы оно действительно заполнялось миллионами строк. –
сколько дополнительных параметров в фильмах видового экрана? – rstrelba