Лучший способ пролистать результаты в SQLite - PullRequest
1 голос
/ 23 сентября 2019

Предположим, у меня есть следующий запрос в SQLite:

SELECT * FROM mytable ORDER BY product ASC

Я бы хотел, чтобы конечный пользователь мог просматривать данные с возможностью прокрутки (например, например, данные, доступные для просмотра в Excel)).Если пользователь прокручивает до 100 результатов, вместо того, чтобы делать что-то вроде:

SELECT * FROM mytable ORDER BY product ASC LIMIT 50 OFFSET 100

Я хочу убедиться, что возвращаемые ему результаты меньше 25 мс или около того, вместо того, чтобы ждать, пока это займет время.выполнять запрос каждый раз, когда они выходят за пределы видимого диапазона.

Каков наилучший способ сделать это?В псевдокоде я думал следующим образом:

-- 1st time query is run
SELECT * FROM mytable ORDER BY product ASC LIMIT 50 -- in main thread
INSERT INTO queryset_cache -- in background thread
  SELECT rowid, * FROM mytable ORDER BY product ASC 

-- 2nd time query is run, offset 84,500 (user scrolls down to that position
SELECT * FROM queryset_cache ORDER BY rowid LIMIT 50 OFFSET 84500

Это был бы лучший способ выполнить то, что я пытаюсь сделать?Или есть стандартизированный способ сделать что-то подобное в SQLite?Если это так, что будет лучшим способом сделать это?

1 Ответ

2 голосов
/ 23 сентября 2019

Использование OFFSET, как правило, не очень хорошая идея, поскольку база данных должна пропустить столько строк перед возвратом результата.

Хорошим решением является наличие индекса для столбца product и SELECT ... FROM ... WHERE product BETWEEN _start_ AND _end_

И продолжайте изменять start и _end так, чтобы база данных возвращала нужную страницу.

Если это сложно, скажем, у вас много строк с идентичным продуктом, который выможно определить составной ключ (product, xxx), который лучше выбирает строки, и использовать его для выбора страницы.

Если все остальное не удается и вы решили создать новую таблицу для подкачки - добавьте автоинкрементный столбец id истраница с использованием этого ключа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...