В postgresql: разъяснение «CONSTRAINT foo_key PRIMARY KEY (foo)» - PullRequest
2 голосов
/ 09 марта 2010

Извините, если это простой вопрос, но я запутался в документации и не получил четких ответов при поиске в Интернете.

Если у меня есть следующая схема таблицы:

CREATE TABLE footable
(
  foo character varying(10) NOT NULL,
  bar timestamp without time zone,
  CONSTRAINT pk_foo PRIMARY KEY (foo)
);

и затем используйте запрос:

SELECT bar FROM footable WHERE foo = '1234567890';

Будет ли запрос на выборку найти данную строку путем поиска в индексе или нет? Другими словами: есть ли у таблицы первичный ключ (который является foo) или нет?

Просто чтобы было понятно. Я привык указывать «ПЕРВИЧНЫЙ КЛЮЧ» после столбца, который я определяю так:

"...foo character varying(10) PRIMARY KEY, ..."

Это что-то меняет?

Ответы [ 2 ]

3 голосов
/ 09 марта 2010

Почему бы не взглянуть на план запроса и не узнать себя? План запроса точно скажет, какие индексы используются, поэтому вам не нужно угадывать. Вот как это сделать: http://www.postgresql.org/docs/current/static/sql-explain.html

Но в общем случае в этом случае следует использовать индекс, поскольку вы указали первичный ключ в предложении where и не использовали что-то, что могло бы помешать его использованию (например, LIKE).

Всегда лучше взглянуть на план запроса, чтобы убедиться в этом, тогда нет никаких сомнений.

0 голосов
/ 09 марта 2010

В обоих случаях можно использовать первичный ключ, но это зависит. Оптимизатор сделает выбор в зависимости от объема данных, статистики и т. Д.

Обозначение ограничения может облегчить отладку и обработку ошибок, вы знаете, какое ограничение нарушено Без имени это может сбить с толку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...