За последние 24 часа нас посетили 17395 программистов и 988 роботов. Сейчас ищут 426 программистов ...

Index для UUID

Тема в разделе "PostgreSQL", создана пользователем polin11, 21 авг 2021.

  1. polin11

    polin11 Активный пользователь

    С нами с:
    22 янв 2019
    Сообщения:
    20
    Симпатии:
    0
    Использую Postresql.
    Есть таблица Documents с полями:
    Account тип bigint
    Document тип bigint
    User тип UUID

    Есть 2 индекса
    Код (Text):
    1. CREATE INDEX "AccountDocument" ON "Documents" USING btree ("Account" NULLS LAST, "Document" NULLS LAST)
    2. WHERE ("Account" IS NOT NULL OR "Document" IS NOT NULL);
    Код (Text):
    1. CREATE INDEX "AccountUserDocument" ON "Documents"  USING btree ("Account", "User", "Document")
    Для простого запроса хочу, чтобы использовался индекс AccountUserDocument

    Код (Text):
    1. SELECT *
    2. FROM "Documents"
    3. WHERE "Account" = 1
    4. AND "USER" = 'dd758b54-55b3-442a-804b-8a3d311432ba'::UUID
    5. AND "Document" = 2
    но используется индекс AccountDocument

    Код (Text):
    1. SELECT *
    2. FROM "Documents"
    3. WHERE "Account" = 1
    4. AND "USER" = 'dd758b54-55b3-442a-804b-8a3d311432ba'::UUID
    5. AND "Document" = 2
    только есть указать у индекса AccountUserDocument тип индекса gist, то он используется

    Код (Text):
    1. "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)"
    2. "  Index Cond: (("User" = 'dd758b54-55b3-442a-804b-8a3d311432ba'::uuid) AND ("Document" = 2))"
    3. "  Filter: ("Account" = 1)"
    4. "  Buffers: shared hit=73"
    5. "Planning time: 0.946 ms"
    6. "Execution time: 3.652 ms"
    Почитал инфу про тип gist он обычно используется для полнотекстового поиска.

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