У меня есть стол для людей. Я хочу посмотреть их, используя поле person_code
, которое представляет собой буквенно-цифровую строку. Я создал индекс, как:PostgresSQL не использует индекс для подстановочных знаков
create index my_idx on persons(some_function(person_code))
Однако, когда я пытаюсь что-то вроде:
select * from persons where some_function(person_code) like 'mycode%'
Я в конечном итоге, последовательное сканирование вместо индексного сканирования. Согласно Postgres index types documentation, LIKE
должен использовать индекс, если шаблон соответствия является константой и привязан к началу строки.
Любые идеи о том, что я могу сделать неправильно?
Он будет использовать индекс, если планировщик считает, что есть выгода используя индекс. Это зависит от количества строк, статистики таблицы, количества строк, которые, по его мнению, будут возвращены и т. Д. –
Пожалуйста, добавьте план выполнения (используя 'explain (analysis, verbose)') как ** отформатированный ** текст на ваш вопрос –
' some_function (person_code), например 'mycode%' 'Что такое some_function? Шансы большие, что функция * не может * использовать индекс, просто потому, что это функция. – wildplasser