Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Index для UUID 
:(
    Опции темы
polin11
Дата 21.8.2021, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 6.6.2015

Репутация: нет
Всего: нет



Использую Postresql.
Есть таблица Documents с полями:
Account тип bigint 
Document тип bigint
User тип UUID

Есть 2 индекса
Код

CREATE INDEX "AccountDocument" ON "Documents" USING btree ("Account" NULLS LAST, "Document" NULLS LAST)
WHERE ("Account" IS NOT NULL OR "Document" IS NOT NULL);

    
Код

CREATE INDEX "AccountUserDocument" ON "Documents"  USING btree ("Account", "User", "Document")


Для простого запроса хочу, чтобы использовался индекс AccountUserDocument

Код

SELECT *
FROM "Documents"
WHERE "Account" = 1
AND "USER" = 'dd758b54-55b3-442a-804b-8a3d311432ba'::UUID 
AND "Document" = 2


но используется индекс AccountDocument

Код

"Index Scan using "AccountDocument" on "Documents"  (cost=0.29..8.31 rows=1 width=73) (actual time=0.016..0.016 rows=0 loops=1)"
"  Index Cond: ("Document" = 2)"
"  Filter: (("Account" = 1) AND ("USER" = 'dd758b54-55b3-442a-804b-8a3d311432ba'::uuid))"
"  Buffers: shared hit=2"
"Planning time: 1.026 ms"
"Execution time: 0.039 ms"


только есть указать у индекса AccountUserDocument тип индекса gist, то он используется 

Код

"Index Scan using "AccoutUserDocument" on "Documents"  (cost=0.28..8.30 rows=1 width=73) (actual time=3.626..3.626 rows=0 loops=1)"
"  Index Cond: (("User" = 'dd758b54-55b3-442a-804b-8a3d311432ba'::uuid) AND ("Document" = 2))"
"  Filter: ("Account" = 1)"
"  Buffers: shared hit=73"
"Planning time: 0.946 ms"
"Execution time: 3.652 ms"


Почитал инфу про тип gist он обычно используется для полнотекстового поиска.

Вопрос почему индекс не используется с типом btree, только из-за того, что в индексе есть поле UUID?



Это сообщение отредактировал(а) polin11 - 21.8.2021, 18:24
PM MAIL   Вверх
Akina
Дата 21.8.2021, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20502
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 3
Всего: 453



Ну так вроде очевидно, что поиск по двум бигинтам эффективнее, чем когда между ними ещё и бинари-16. Хотя бы потому, что гораздо компактнее.
Вот если бы не было звезды, если бы второй индекс был покрывающим...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
_zorn_
Дата 28.8.2021, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1049
Регистрация: 21.8.2007

Репутация: нет
Всего: 12



Одна (не) очевидная вещь - в запросе может использоваться только один индекс. И выбирается "лучший".
Сам почему то думал что если индексов навешать побольше, база "разберется" )
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PostgreSQL | Следующая тема »


 




[ Время генерации скрипта: 0.0996 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.