Может ли 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 полностью допустим для использования в индексе.