Может ли postgres использовать индекс, если предложение является модулем

Я искал ответ на этот вопрос, но единственной ссылкой, которую я смог найти, было неясное сообщение на форуме, в котором говорилось, что операторы, включая% (по модулю), были "sargable" (то есть могли использовать индекс, над которым работал оператор)

Однако в некоторых ситуациях использование модуля по параллелизму наших процессов, по-видимому, не использует индекс по модулю даже в поле первичного ключа. Это может быть связано с тем, что оптимизатор решает, что сканирование таблицы в любом случае дешевле, но трудно определить причину сокращения индекса.

Есть ли у кого-нибудь однозначный ответ или поделиться подобным опытом?

Postgres / EDB v9.3

TIA.

редактировать например

CREATE TABLE my_table(id bigint, othercolumn varchar(50), PRIMARY KEY(id))

... вставить х миллионов записей в таблицу...

SELECT othercolumn from my_table where id % 1000 = 0

1 ответ

Индексы могут использоваться в любом столбце или выражении, которое является неизменным. Другими словами, результат выражения должен зависеть исключительно от значений нижележащих столбцов, либо напрямую, либо через выражение, в котором они используются. Поэтому оператор modulo полностью допустим для использования в индексе.

Другие вопросы по тегам