Сохраняют ли представления SQL представления информации об отношениях с точки зрения производительности? - PullRequest
0 голосов
/ 12 января 2009

Рассмотрим таблицы: (-> обозначает отношение, определенное в SQL)

USER (userid, username, imageid->IMAGE.imageid)
EVENT (eventid, userid->USER.userid, description)
IMAGE (imageid, location)

Скажем, у меня есть представление (назовем его vw_UserInfo), определенное как следующий запрос.

SELECT u.*, i.* FROM users u
INNER JOIN images i ON i.imageid = u.imageid

Знает ли SQL об отношениях между EVENT.userid и vw_UserInfo.userid? Я имею в виду, будет ли по-прежнему применяться выигрыш в производительности операции JOIN в смежных областях? Я полагаю, это может варьироваться в зависимости от того, какую базу данных SQL вы используете.


РЕДАКТИРОВАТЬ: В попытке быть немного яснее. Я спрашиваю, будет

SELECT ui.*, e.* FROM vw_UserInfo ui 
INNER JOIN events e ON ui.userid = e.userid

Выгода от внешнего ключа, определенного как

SELECT u.*, i.*, e.* FROM users u
INNER JOIN images i ON i.imageid = u.imageid
INNER JOIN events e ON e.userid = u.userid

будет

Ответы [ 3 ]

2 голосов
/ 12 января 2009

Нет, поскольку представления (по крайней мере, в SQL Server) на самом деле не являются частью системы ограничений (наличие или отсутствие представления не должно влиять на производительность любого запроса, не ссылающегося на представление). Однако индексированные представления (материализованные представления) могут способствовать повышению производительности. Я не уверен, какие оптимизаторы будут использовать их в планах выполнения, если на них нет явных ссылок.

Если вы прочитаете эту статью Celko , вы увидите, что чем больше метаданных вы предоставите базе данных об ограничениях и связях внешнего ключа между вашими таблицами, это может повысить производительность запросов.

0 голосов
/ 12 января 2009

Да, вроде.

Столько, сколько оптимизатор может оптимизировать, используя индексы базовых таблиц, поскольку представления расширяются на этапе компиляции.

Но ... как говорит Роверт, отношения не ускоряют запросы, а индексы делают.

0 голосов
/ 12 января 2009

Отношения обеспечивают целостность данных, они не имеют ничего общего с быстрым выбором данных. Это область индексов. В общем, отношения (особенно в таблицах со многими из них) замедляют доступ к данным (особенно записи).

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