Как добиться, чтобы в запросах LIKE 'что%' использовался индекс ? |
[исправить] |
Из-за сложности и многообразия locale в постгресе запрещено использовать индекс
для запросов вида LIKE 'что%' для всех locale кроме 'C'. А что делать если хочется ?
В 8.01 стало возможным использовать operator class [1] ! Мы будем использовать
varchar_pattern_ops, B-tree индекс
в этом случае, будет строиться без использования collation правил из locale, а
на основе сравнения буквы с буквой.
test=# \d ru_words
w | text |
Indexes:
"w_idx" btree (lower(w) varchar_pattern_ops)
test=# create index w_idx on ru_words (lower(w) varchar_pattern_ops);
CREATE INDEX
test=# vacuum analyze test;
test=# explain analyze select w from ru_words where lower(w) like 'что%';
Index Scan using w_idx on ru_words...
Index Cond: ((lower(w) ~>=~ 'что'::character varying) AND (lower(w) ~<~ 'чтп'::character varying))
Filter: (lower(w) ~~ 'что%'::text)
|
|
|
|
Раздел: Корень / Программисту и web-разработчику / SQL и базы данных / PostgreSQL специфика / Оптимизация и администрирование PostgreSQL |