SQLite FTS: как быстро получить количество результатов с совпадением и ограничением?

В SQLite: выберите * из таблицы 1, где таблица 1 соответствует «любому слову здесь», ограничение 10, смещение 0;

Мне нужно получить общее количество результатов, скажем, это будет 10 000

Итак, я должен выполнить другой запрос, например: Выберите count (*) из таблицы 1, где таблица 1 соответствует «любому слову здесь»;

Есть ли более быстрое решение?

Я искал и не нашел.


person user2241289    schedule 03.04.2013    source источник
comment
Ваше решение очень быстрое. Как быстрее всего получить количество результатов с группировкой по полю в поиске FTS. Например, по BookID. Команда Group By очень медленная в большой базе данных.   -  person saeid2014    schedule 22.10.2020


Ответы (1)


SQLite вычисляет записи результатов на лету. Поэтому, когда вы используете предложение LIMIT, никакие записи после десятого никогда не будут видны.

Если вам нужно общее количество, вы должны использовать COUNT.

person CL.    schedule 03.04.2013
comment
спасибо, так что если я использую SELECT COUNT после поискового запроса, это будет быстрее, чем если бы я использовал его раньше, или то же самое? - person user2241289; 03.04.2013
comment
И почему нет никакой хитрости, чтобы рассчитать количество результатов непосредственно из FTS INDEX или получить что-то вроде ~ 10 000 результатов, как говорит Google? - person user2241289; 03.04.2013
comment
Повторные запросы к одним и тем же данным будут выполняться быстрее, если данные помещаются в кеш. Хотя FTS для SQLite изначально был написан сотрудником Google, он не обладает всеми функциями фактического движка Google. - person CL.; 04.04.2013