Быстрое количество строк в Sqlite - PullRequest
2 голосов
/ 08 сентября 2011

У меня есть одна таблица в Sqlite DB, с большим количеством строк.Мне нужно получить количество строк (общее количество элементов в таблице).

Я пытался select count(*) from table, но, кажется, доступ к каждой строке и очень медленно.

Я такжепопробовал select max(rowid) from table.Это быстро, но не совсем безопасно - идентификаторы могут быть использованы повторно, таблица может быть пустой и т. Д. Это скорее взлом.1010 *?


Использование Python 2.5 sqlite3 версии 2.3.2, в которой используется движок Sqlite 3.4.0.

Ответы [ 3 ]

1 голос
/ 08 сентября 2011

Другой способ получить номер строки таблицы - использовать триггер, который сохраняет фактическое количество строк в другой таблице (каждая операция вставки будет увеличивать счетчик). Таким образом, вставка новой записи будет немного медленнее, но вы можете сразу получить количество строк.

1 голос
/ 08 сентября 2011

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

0 голосов
/ 06 января 2016

Чтобы прокомментировать ответ Тило, в качестве точки данных у меня есть таблица sqlite с 2,3 миллионами строк.Используя select count(*) from table, для подсчета строк потребовалось более 3 секунд.Я также попытался использовать SELECT rowid FROM table (думая, что rowid является первичным индексированным ключом по умолчанию), но это было не быстрее.Затем я сделал индекс для одного из полей в базе данных (просто произвольное поле, но я выбрал целочисленное поле, потому что я знал из прошлого опыта, что индексы для коротких полей могут быть очень быстрыми, я думаю, потому что индекс хранится в копиизначения в самом индексе).SELECT my_short_field FROM table сократил время до секунды.

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