Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как заставить PG использовать индекс при условии с оператором ~~ ?
|
|||
|---|---|---|---|
|
#18+
Есть таблица с индексом: create table mytable (charfield char(20) not null); create index mtchf on mytable (charfield); В таблице сейчас около 10K записей. Вопрос. Почему запрос типа select * from mytable where charfield ~~ '300%' который возвращает все записи, начинающиеся на 300 не использует индекс, Seq Scan on mytable (cost=0.00..562.64 rows=34 width=383) Filter: (charfield ~~ '300%'::text) а запрос select * from mytable where charfield = '30012' индекс использует ? Index Scan using mtchf on mytable (cost=0.00..133.25 rows=34 width=383) Index Cond: (charfield = '30012'::bpchar) В чем я ошибся ? Нужно было индекс другого типа применить или вместо ~~ написать другой какой-то оператор ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2005, 11:17 |
|
||
|
Как заставить PG использовать индекс при условии с оператором ~~ ?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2005, 11:37 |
|
||
|
Как заставить PG использовать индекс при условии с оператором ~~ ?
|
|||
|---|---|---|---|
|
#18+
Спасибо ! Надо было написать create index mtchf on mytable (charfield bpchar_pattern_ops); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2005, 12:04 |
|
||
|
Как заставить PG использовать индекс при условии с оператором ~~ ?
|
|||
|---|---|---|---|
|
#18+
Проблема 1. Если вместо оператора ~~ использовать =, то индекс с таким паттерном уже не используется. Т.е. для таблицы приходится строить 2 индекса для условий с ~~ и =. Что не есть хорошо :-( Проблема 2. Что делать, если в таблице два поля типа charfield, например, charfield1, charfield2. А условие должно звучать where charfield1 ~~ '301%' or charfield2 ~~ '303%' Все - при таком условии индексы не используются ни в какую. Хоть создать составной индекс по charfield1, charfield2, хоть пару индексов по обеим полям, хоть все три. И что делать ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2005, 20:43 |
|
||
|
Как заставить PG использовать индекс при условии с оператором ~~ ?
|
|||
|---|---|---|---|
|
#18+
strizh Проблема 2. Что делать, если в таблице два поля типа charfield, например, charfield1, charfield2. А условие должно звучать where charfield1 ~~ '301%' or charfield2 ~~ '303%' Все - при таком условии индексы не используются ни в какую. Хоть создать составной индекс по charfield1, charfield2, хоть пару индексов по обеим полям, хоть все три. И что делать ? Скорее всего разбиение запроса на два с UNION поможет: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2005, 07:13 |
|
||
|
Как заставить PG использовать индекс при условии с оператором ~~ ?
|
|||
|---|---|---|---|
|
#18+
strizhПроблема 2. Что делать, если в таблице два поля типа charfield, например, charfield1, charfield2. А условие должно звучать where charfield1 ~~ '301%' or charfield2 ~~ '303%' Все - при таком условии индексы не используются ни в какую. Хоть создать составной индекс по charfield1, charfield2, хоть пару индексов по обеим полям, хоть все три. И что делать ?Индексы используются! Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2005, 12:32 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=32988053&tid=2007338]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
31ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 317ms |

| 0 / 0 |
