Разница создания unique в PostgreSQL 14.0

Заметил следующее, что при создание UNIQUE двумя разными способами в PostgreSQL 14.0, скорость выполнения SELECT-запросов , различается. При создание таблицы таким способом:

create table a2
(
    c1 integer
        unique,
    c2 integer
);

Скорость выполнения SELECT-запросов будет быстрее, чем таблица, созданная следующим образом:

create table a4
(
    c1 integer
        constraint u_1
            unique,
    c2 integer
);

Пример результатов выполнения запросов:

1

     postgres.public> SELECT * FROM a2 WHERE c1 IN (1,2434534,132,123,546,58,234,4567567,234,435634576354,10)
[2022-04-01 18:51:39] 9 rows retrieved starting from 1 in 64 ms (execution: 4 ms, fetching: 60 ms)

     postgres.public> SELECT * FROM a4 WHERE c1 IN (1,2434534,132,123,546,58,234,4567567,234,435634576354,10)
[2022-04-01 18:51:39] 9 rows retrieved starting from 1 in 67 ms (execution: 4 ms, fetching: 63 ms)

2

     postgres.public> SELECT * FROM a2 WHERE c1 IN (1,2434534,132,123,546,58,234,4567567,234,435634576354,10)
[2022-04-01 18:51:42] 9 rows retrieved starting from 1 in 37 ms (execution: 3 ms, fetching: 34 ms)

     postgres.public> SELECT * FROM a4 WHERE c1 IN (1,2434534,132,123,546,58,234,4567567,234,435634576354,10)
[2022-04-01 18:51:42] 9 rows retrieved starting from 1 in 60 ms (execution: 4 ms, fetching: 56 ms)

3

     postgres.public> SELECT * FROM a2 WHERE c1 IN (1,2434534,132,123,546,58,234,4567567,234,435634576354,10)
[2022-04-01 18:51:43] 9 rows retrieved starting from 1 in 42 ms (execution: 5 ms, fetching: 37 ms)

     postgres.public> SELECT * FROM a4 WHERE c1 IN (1,2434534,132,123,546,58,234,4567567,234,435634576354,10)
[2022-04-01 18:51:43] 9 rows retrieved starting from 1 in 71 ms (execution: 4 ms, fetching: 67 ms)

Чем обусловлено такое поведение PostgreSQL? И чем CONSTRAINT в создание таблицы замедляет скорость выполнения запроса?


Ответы (0 шт):