Есть таблица со множеством полей типа:
CREATE TABLE big_data ( id serial NOT NULL, ... is_active BOOLEAN NOT NULL, source_id integer NOT NULL, CONSTRAINT big_data_pkey PRIMARY KEY (id) );
Есть общий индекс btree на is_active и source_id.
Запрос во вновь созданной таблице на 7 млн. сгенерированных записей
SELECT id FROM big_data WHERE is_active IS TRUE AND source_id=2 ORDER BY id DESC LIMIT 1;
отрабатывает вполне себе шустро, а вот с боевого накатываю 7 млн.записей -- выполняется более получаса и не дает результатов. При этом в логе этот запрос показывается и EXPLAIN-ы (без выполнения) на обоих наборах данных почти одинаковые.
В чем может быть причина? Или как можно диагностировать проблему?
Сделайте для начала VACUUM
Сделайте для начала VACUUM ANALYZE на таблицу
Что выдаст: 1 EXPLAIN SELECT
Что выдаст:
1
2
3
Большое спасибо за участие!
Вроде немного проясняется. Всё дело в том, что есть 2 таблицы. Одна с рабочими данными, а другая тестовая для опытов.
Рабочая:
и та на которой я всё тестирую, заполненная примерно таким же количеством данных:
Так вот. Один и тот же запрос:
и
EXPLAIN SELECT id FROM big_data WHERE is_active AND source_id=2 ORDER BY id DESC LIMIT 1;
даёт разные результаты - в одном индекс используется, в другом - нет: