@pqgg7nwkd4

Почему postgres не использует gin индекс для запроса? = ANY(field)?

Пример (https://www.db-fiddle.com/f/bZRFDcpt8DfvLPUBuMEi7t/0):
CREATE TABLE test (id SERIAL, array_field INT[]);
CREATE INDEX test_arr ON test USING gin (array_field);

INSERT INTO test (array_field)
SELECT ARRAY[round(random()*10000), round(random()*10000), round(random()*10000)]::int[]
FROM generate_series(1, 1000000);

ANALYZE test;
SET enable_seqscan = OFF;
                                                               

-- NOT USED
EXPLAIN ANALYZE SELECT * FROM test WHERE 10 = ANY(array_field);

-- USED
EXPLAIN ANALYZE SELECT * FROM test WHERE ARRAY[10]::int[] <@ array_field;


Два последний запроса идентичны, однако постгрес не хочет использовать индекс в первом случае. Почему? Если это какое-то ограничение, то с чем оно связано?
  • Вопрос задан
  • 27 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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