Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Странное поведение gin индекса
|
|||
|---|---|---|---|
|
#18+
Всем привет Есть PostgreSQL 13.1 (Debian 13.1-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit Есть для меня крайне странная ситуация при НЕ использовании индексов. Запрос 1 Код: sql 1. 2. 3. 4. Где tags - text[] и создан gin индекс (array_ops). Если ввожу массив с частотным данным - идет seq scan. Если ввожу массив с не частотными данными - используется индекс. Вроде все логично. План Код: sql 1. 2. 3. 4. 5. 6. Проблема 1. Если переписать запрос Запрос 2 Код: sql 1. 2. 3. 4. Где tags будет json массивом, то индекс будет использоваться ВСЕГДА. План Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Почему так происходит? Фактически наблюдаю проблему, что по частотным тегам использование индекса лучше и запрос выполняется быстрее. Проблема 2. Если в первом варианте запроса со string_to_array применить какие-то еще условия в where, то индексы для них вообще не используются (и выполнение запроса занимает вплоть до 10 секунд). А для второго - всегда используются (время запроса - около 1s). Могу тут тоже представить планы, но для 1 запрос там остается обычный seq scan, для второго все корректно - все индексы используются. Почему не используются индексы для первого запроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2021, 23:16 |
|
||
|
Странное поведение gin индекса
|
|||
|---|---|---|---|
|
#18+
Идеи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2022, 10:03 |
|
||
|
Странное поведение gin индекса
|
|||
|---|---|---|---|
|
#18+
andrei07 Идеи? 1)сделайте для теста set enable_seq_scan to 0; и заново explain analyze исходного запроса... надо сравнить цену (cost) с точки зрения базы для seq scan и bitmap scan и если цена отличается от реальных времязатрат - думать о том что и как в *_cost параметрах у вас в настройках базы не соответствует реальности. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2022, 10:33 |
|
||
|
Странное поведение gin индекса
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk, В таблице немного данные поменялись, поэтому заново приведу исходный план set enable_seqscan = on; plan: Код: plsql 1. 2. 3. 4. 5. set enable_seqscan = off; plan: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. Т.е. cost=0.00..2860.96, а у исходного cost=0.00..58035.59. Т.е. вывод, что все же планировщик должен был выбрать сканирование по индексу? По *_cost параметрам - никаких изменений не вносилось, все стоит дефолтное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2022, 18:12 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=3&tid=1993711]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
2ms |
| others: | 273ms |
| total: | 396ms |

| 0 / 0 |
