Как ускорить поиск по индексу, где много null?

Имеется таблица 6 млн строк, в ней foreign key к таблице 30 строк. Долго ищет обычные запросы (минуты), при этом count(*) тех же запросов - моментально. В чем может быть проблема?
При этом важно отметить, что, например, запросы по текстовому индексу к этой таблице выполняются быстро (максимум секунды, в выборках могут быть десятки тысяч строк и все быстро извлекается).
  • Вопрос задан
  • 2025 просмотров
Решения вопроса 1
@chemdev Автор вопроса
Для ускорения работы запроса был создан частичный индекс по проблемному столбцу, выглядит так:
CREATE INDEX "last_modified_user_notnull_idx" ON "my_table" ("last_modified_user_id") WHERE "last_modified_user_id" IS NOT NULL;

После этого запросы по типу
SELECT * FROM "my_table" where last_mofied_user_id=x;
перестали зависать.
Также в таких ситуациях стоит выполнить VACUUM ANALYZE "my_table";
Структура таблиц
CREATE TABLE "user" (
    id INT GENERATED ALWAYS AS IDENTITY,
    PRIMARY KEY(id)
)

CREATE TABLE "my_table" (
    id bigserial INT GENERATED ALWAYS AS IDENTITY
    last_modfied_user_id int default NULL,
    PRIMARY KEY(id),
    CONSTRAINT fk_last_modified_user FOREIGN KEY(last_modfied_user_id) REFERENCES user(id)
)

За помощь в решении выражаю благодарность Everything_is_bad
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы