SQLite не «извлекает» все строки при первоначальной обработке запроса. Он возвращает одну строку каждый раз при выполнении подготовленного запроса.
Из FAQ по SQLite3 здесь
В) Какая функция может получить количество строк?
A) Нет функции для получения количества строк в наборе результатов. SQLite заранее не знает число, но возвращает строку за строкой, просматривая таблицы. Приложение может увеличивать счетчик строк по мере необходимости в каждом успешном sqlite3_step ().
Некоторые оболочки могут собирать все строки в наборе результатов в таблице в памяти, поэтому они могут возвращать количество строк.
Вы всегда можете получить количество строк, которое определенная инструкция SELECT вернет за счет некоторой производительности:
BEGIN IMMEDIATE TRANSACTION;
SELECT COUNT(*) FROM x WHERE y;
SELECT a,b,c FROM x WHERE y;
ROLLBACK TRANSACTION;
Вы должны заключить это в транзакцию, чтобы другие соединения не вставляли / не удаляли строки между двумя операторами SELECT.