|
Почему может не применятся индекс?
|
|||
---|---|---|---|
#18+
извиняюсь не могу прислать план выполнения. Версия постгри 9.6 Имеется таблица условно назовем ее t у нее есть ссылочное поле "c" на нем висит констрейн и индекс, на время активной вставки в нее ~65тыс строк были удалены все индексы и констрейны. После чего созданы обратно. Одинаковые значения в поле "с" встречаются с частотой от 1 до 5 раз, как говорится почти идеальный вариант для индексов, только планировщик так не считает и запрос Код: plsql 1.
дает полное сканирование таблицы с стоимостью в 10000000000..10000000xxx единиц. Код: plsql 1.
делал - не помогает. причем проблема такая с несколькими таблицами, на другой таблице с числом записей около 13млн помогло повторное удаление индексов и констрейнов с поля и создания их заново. А с этой какая то засада. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2018, 22:33 |
|
Почему может не применятся индекс?
|
|||
---|---|---|---|
#18+
С стоимостью в 10000000000 единиц разобрался - это была реакция на отключение enable_seqscan, но даже в этом случае индекс не применялся ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2018, 23:33 |
|
Почему может не применятся индекс?
|
|||
---|---|---|---|
#18+
Swa111С стоимостью в 10000000000 единиц разобрался - это была реакция на отключение enable_seqscan, но даже в этом случае индекс не применялся 1)покажите целиком запрос как есть 2)покажите итоги explain analyze целиком 3)покажите \d+ имя таблицы (тоже целиком) тогда и обсудим что не так. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2018, 04:14 |
|
Почему может не применятся индекс?
|
|||
---|---|---|---|
#18+
Код: plsql 1.
Seq Scan on tcardaccept (cost=0.00..3644.32 rows=1 width=309) (actual time=24.077..37.350 rows=1 loops=1) Filter: (idcard = '1694841'::numeric) Rows Removed by Filter: 47465 Planning time: 0.197 ms Execution time: 37.394 ms Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68.
на другой бд план другой Index Scan using xif612tcardaccept on tcardaccept (cost=0.42..10.71 rows=2 width=295) (actual time=0.084..0.084 rows=1 loops=1) Index Cond: (idcard = '1694841'::numeric) Planning time: 5.670 ms Execution time: 0.124 ms ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2018, 09:40 |
|
Почему может не применятся индекс?
|
|||
---|---|---|---|
#18+
Swa111, hmm это точно стандартный постгрес а не поделка какая то левая? (в стандартной поставке я не припомню Options: macs=false) и такой же вопрос про ту базу где индекс работает. Для теста еще попробуйте сделать: explain analyze select * from tcardaccept where idCard = 1694841::numeric(16,0); PS: тот кто придумал структуру таблиц на основе Numeric (который на 2 порядка медленее чем bigint/int) - скажем так - альтернативно одаренный... и аналогично про boolean в виде character varying(1). -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2018, 10:27 |
|
Почему может не применятся индекс?
|
|||
---|---|---|---|
#18+
Maxim Boguk, Нет, это какая то местная сборка на базе 9.5.1 (в первом посте не правильно указал версию), там где индексы работают - это тот же сервер только другая БД. Причем на этой же БД есть копия таблицы tcardaccept, но в другой схеме, всего с двумя индексами id и idCard и там индексы работают нормально. По поводу типов данных тоже много вопросов к архитектору Явное приведение типов не помогло. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2018, 10:45 |
|
Почему может не применятся индекс?
|
|||
---|---|---|---|
#18+
Swa111С стоимостью в 10000000000 единиц разобрался - это была реакция на отключение enable_seqscan, но даже в этом случае индекс не применялся Может indexscan тоже отключен? Что показывает запрос, там где индекс не используется: Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2018, 12:01 |
|
Почему может не применятся индекс?
|
|||
---|---|---|---|
#18+
Павел Лузанов, Все включено. Индексы не работают только на нескольких таблицах. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2018, 12:07 |
|
Почему может не применятся индекс?
|
|||
---|---|---|---|
#18+
Swa111, А что показывает столбец indisvalid в таблице pg_index для индекса xif612tcardaccept ? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2018, 12:31 |
|
Почему может не применятся индекс?
|
|||
---|---|---|---|
#18+
А покажите most_common_vals и most_common_freqs из pg_stats для этого столбца? Может для 99% строк это 1694841 вот он и выбирает seq scan? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2018, 12:40 |
|
Почему может не применятся индекс?
|
|||
---|---|---|---|
#18+
Павел Лузанов, indisvalid = true bff7755a, конкретно этот код 1694841 вообще не попал в статистику most_common_vals попробовал код с частотой 0,0005 из most_common_freqs - не помогло по прежнему полное сканирование попробовал код с частотой 0,00023 - аналогично. на боевой БД выше индекс correlationЖ: 0.66 против 0,52 + на тестовой (проблемной) в поле idCard встречается null ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2018, 13:00 |
|
Почему может не применятся индекс?
|
|||
---|---|---|---|
#18+
bff7755aА покажите most_common_vals и most_common_freqs из pg_stats для этого столбца? Может для 99% строк это 1694841 вот он и выбирает seq scan? Так приводили же итоги explain analyze... Seq Scan on tcardaccept (cost=0.00..3644.32 rows=1 width=309) (actual time=24.077..37.350 rows=1 loops=1) Filter: (idcard = '1694841'::numeric) Rows Removed by Filter: 47465 1 строка и по плану и в реальности из 50000 почти. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2018, 13:01 |
|
Почему может не применятся индекс?
|
|||
---|---|---|---|
#18+
Swa111Maxim Boguk, Нет, это какая то местная сборка на базе 9.5.1 (в первом посте не правильно указал версию), там где индексы работают - это тот же сервер только другая БД. Причем на этой же БД есть копия таблицы tcardaccept, но в другой схеме, всего с двумя индексами id и idCard и там индексы работают нормально. По поводу типов данных тоже много вопросов к архитектору Явное приведение типов не помогло. Тогда перегрузите таблицу со всеми данными и индексами в стандартную PG, и если там проблемы нет - все вопросы к авторам кривой сборки. Вряд ли вам кто то на счет кастомных сборок и их глюков поможет тут. Все возможные причины почему в стандартной сборке могло быть такое поведение - уже тут проверили. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2018, 13:05 |
|
|
start [/forum/topic.php?fid=53&msg=39747272&tid=1995439]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 138ms |
0 / 0 |