У меня есть sqlite db на встроенной платформе ARM под управлением Linux с несколько ограниченными ресурсами.Запоминающее устройство представляет собой карту microSD.Версия Sqlite - 3.7.7.1.Приложение, обращающееся к sqlite, написано на C ++.
Я хочу знать количество строк в нескольких таблицах через равные промежутки времени.В настоящее время я использую
select count(*) from TABLENAME;
, чтобы получить эту информацию.У меня проблемы с производительностью: когда размеры таблиц достигают определенной точки (~ 200 тыс. Строк), у меня возникает большая загрузка системы и iowait каждый раз, когда я проверяю размеры таблиц.
Когда я писал этоЯ, хотя поиск количества строк в таблице будет быстрым, поскольку он, вероятно, где-то хранится.Но теперь я подозреваю, что sqlite фактически просматривает все строки, и когда я прохожу точку, когда данные больше не помещаются в дисковый кеш, я получаю большую нагрузку ввода-вывода.Это примерно соответствует размеру базы данных и доступной памяти.
Может кто-нибудь сказать мне, ведет ли себя sqlite так, как я подозреваю?
Есть ли способ получить количество строк таблицы без выдачиколичество нагрузки?
РЕДАКТИРОВАТЬ : plaes спросил о макете таблицы:
CREATE TABLE %s (timestamp INTEGER PRIMARY KEY, offset INTEGER, value NUMERIC);