Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Индекс для сортировки / 5 сообщений из 5, страница 1 из 1
13.06.2020, 02:30
    #39968737
polin11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индекс для сортировки
Таблица Документы первичный ключ Документ, поле Код типа text.
Есть запрос

Код: sql
1.
2.
3.
4.
5.
6.
SELECT s.*
FROM "Документы" s
where "Документ" = ANY(ARRAY[807830, 807831, 807832, 807833, 807834, 807835, 807836, 807837, 807838, 807839
])
ORDER BY
s."Код"  



Создал индекс
Код: sql
1.
2.
3.
CREATE INDEX "index_sort"
	ON "Документы" USING btree
	("Документ" NULLS LAST, "Код" text_pattern_ops NULLS LAST);



Но почему-то планировщик его не использует, делал VACUUM, REINDEX, используется
индекс по первичному ключу, план такой:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
"Sort  (cost=48.74..48.77 rows=10 width=174) (actual time=0.061..0.062 rows=10 loops=1)"
"  Sort Key: "Код"
"  Sort Method: quicksort  Memory: 26kB"
"  Buffers: shared hit=31"
"  ->  Index Scan using "pДокумент" on "Документы" s  (cost=0.42..48.58 rows=10 width=174) (actual time=0.013..0.025 rows=10 loops=1)"
"        Index Cond: ("Документ" = ANY ('{807830,807831,807832,807833,807834,807835,807836,807837,807838,807839}'::integer[]))"
"        Buffers: shared hit=31"
"Planning time: 0.168 ms"
"Execution time: 0.077 ms"



Как заставить планировщик использовать индекс?
...
Рейтинг: 0 / 0
13.06.2020, 08:17
    #39968745
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индекс для сортировки
polin11,

Никак... если бы вы знали принципы работы btree индексов вы бы понимали что ваш индекс не может использоваться для вашего запроса эффективнее чем индекс по PK (и никакой вообще btree индекс целиком без сортировки наверху не может использоваться).
...
Рейтинг: 0 / 0
13.06.2020, 13:16
    #39968789
polin11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индекс для сортировки
Maxim Boguk,
Подскажите какой создать индекс, чтобы в плане использовался только он и при поиске и при сортировки,
был IndexOnlyScan index_sort или IndexScan index_sort
...
Рейтинг: 0 / 0
13.06.2020, 13:17
    #39968790
polin11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индекс для сортировки
Maxim Boguk,

Подумал, что планировщику для 10 записей легче просканировать все 10 записей для сортировки, чем использовать индекс.

Пробовал в запросе искать по массиву из 10000 идентификаторов,
но планировщик не стал использовать новый иендекс
...
Рейтинг: 0 / 0
13.06.2020, 17:37
    #39968834
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индекс для сортировки
polin11
Maxim Boguk,
Подскажите какой создать индекс, чтобы в плане использовался только он и при поиске и при сортировки,
был IndexOnlyScan index_sort или IndexScan index_sort


Для данного запроса такой индекс невозможен. Всегда будет sort или index scan + filter (если сделать индекс просто по s."Код" ).
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Индекс для сортировки / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]