[SQL] PRIMARY KEY vs. UNIQUE CONSTRAINT
И что из них предпочтительнее использовать?
2) PRIMARY означает, что это - идентификатор строк. А UNIQUE+INDEX - что по этому полю будем искать, и что его значения не повторяются, логически это совсем разные вещи, так что для идентификатора PRIMARY - тру.
3) В MySQL для PRIMARY можно сделать auto_increment (в постгресе вроде как последовательность можно вообще какую угодно и на что угодно сделать, но я могу и ошибаться)
UNIQUE и INDEX - разные вещи, и UNIQUE не включает в себя INDEXТ.е. ты хочешь сказать, что нельзя написать
CREATE UNIQUE INDEX test_i_id ON test_2 (id)? В oracle можно.
Мой вопрос собстенно был в том, что когда поле является PRIMARY KEY, то оно должно быть уникальным и не быть NULL + по нему можно быстро найти нужную строку в таблице => это поле должно быть еще и проиндексированно (я так думаю).
Собственно вопрос про равнозначность PRIMARY KEY и UNIQUE+NOT NULL.
primary key - помечает для всего мира (в том числе и для автоматизированных утилит что именно по этому полю происходит идентификация записи
1) Афаик UNIQUE и INDEX - разные вещи, и UNIQUE не включает в себя INDEX... по крайней мере, в Postres-е.Вранье, как раз включает. При создании unique поля создается неявный индекс.
В постгре разница между primary и not null + unique + index только в том, что в первом случае поле добавляется в список ключей и при foreign key на эту таблицу постгря попытается сама понять, по какому полю искать.
вся остальная реализвация идентична.
Т.е. ты хочешь сказать, что нельзя написатьЯ хочу сказать, что если ты сделаешь поле UNIQUE, то поск по нему всё равно будет осуществляться полным перебором, так что надо делать поле и UNIQUE, и INDEX-ом.
Вранье, как раз включает. При создании unique поля создается неявный индексМы тоже так думали, пока анализатор запросов не спросили. И не увидели, что если поле unique - идёт полный перебор, а еслидополнительно явно сделать его index-ом - поиск идёт по дереву.
Собственно, в чем разница между primary key и not null + unique constraint (БД Oracle)?
Судя по этому:
A primary key constraint combines a NOT NULL and unique constraint in one declaration
вообще ничем.
Мы тоже так думали, пока анализатор запросов не спросили. И не увидели, что если поле unique - идёт полный перебор, а еслидополнительно явно сделать его index-ом - поиск идёт по дереву.доркументация постгреса с тобой не согласна
there's no need to manually create indexes on unique columns; doing so would just duplicate the automatically-created index.
Мы тоже так думали, пока анализатор запросов не спросили. И не увидели, что если поле unique - идёт полный перебор, а еслидополнительно явно сделать его index-ом - поиск идёт по дереву.Как идет поиск — через seq scan или index scan — зависит от кучи факторов: как запрос составлен, сколько записей в таблице, когда был сделан вакуум, какие цены на сканы, как geqo настроен и т.д.
индекс он создает и когда надо использует.
Таблица вида Id PRIMARY KEY, Field UNIQUE, с тысячей записей. SELECT * FROM table WHERE Field = 1234 - полный скан. Если тут же сделать CREATE INDEX - поиск по индексу.
A primary key constraint combines a NOT NULL and unique constraint in one declarationСпасибо, !
Оставить комментарий
sakura
vs.
Собственно, в чем разница между primary key и not null + unique constraint (БД Oracle)?