доступом к ним?
1. Две таблицы имеют только индексы. Запрос соединяет таблицы по имеющимся индексам.
2. Одна таблица "главная", вторая таблица "подчинённая" с внешним ключом на главную таблицу. Запрос соединяет таблицы по внешнему ключу и primary key.
Буквы разные = разница есть. Какую задачу Вы решаете?
Ускорение запросов. Коллега по цеху говорит, что если в подчинённой таблице будет foreign key, то доступ будет быстрее. Мне интересно найти какую-либо информацию есть ли разница в скорости для больших таблиц, если имеются обычные индексы и соединять их по ним в одном случае, и, если есть foreign key в другом случае. Для foreign key ведь создаётся индекс, если я правильно понимаю, аналогичный обычному, значит разницы при соединении не должно быть. Но могу и ошибаться
1) Есть. Выполните pg_dump -- результат будет разным. Так что разница есть. 2) primary key -- это обязательно unique, так что планировщик чётко будет знать, что на каждую запись подчинённой таблицы добавится не более одной записи главной таблицы. Это повлияет на оцэнки количества строк в планировщике, и потому можэт повлиять на выбранный план. 3) Когда-то были ещё какие-то оцэнки по primary key/остальные ключи... Но вроде с тех пор оно засунуто в то, что я описал под п.2, потому остальное не так важно. Но я не уверен.
Делайте сначала правильно, "оптимизировать" будете когда что-то не то станет со скоростью. Если у вас значение одной таблицы ссылается на ключ другой -- то делайте foreign key.
А если оно ссылается не на ключ -- то вы делаете что-то неправильно.
Лучшая теория - это практика :)
В дополнение к ответу @tzirechnoy — FK влияют на планирование запросов: https://t.me/pgsql/302476
Обсуждают сегодня