Почему использование '*' для создания представления плохо? - PullRequest
21 голосов
/ 04 ноября 2008

Почему использование '*' для создания плохого представления?

Предположим, у вас сложное соединение, и все поля могут быть использованы где-то.

Тогда вам просто нужно выбрать необходимые поля.

SELECT field1, field2 FROM aview WHERE ...

Вид "aview" может быть SELECT table1.*, table2.* ... FROM table1 INNER JOIN table2 ...

У нас есть проблема, если 2 поля имеют одинаковые имена в table1 и table2.

Является ли это единственной причиной, по которой использование '*' в представлении плохо?

С '*' вы можете использовать представление в другом контексте, потому что информация там есть.

Чего мне не хватает?

Привет

Ответы [ 14 ]

2 голосов
/ 06 ноября 2008

Никто другой, кажется, не упоминал об этом, но в SQL Server вы также можете настроить свое представление с атрибутом schemabinding .

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

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

2 голосов
/ 04 ноября 2008

Я думаю, это зависит от языка, который вы используете. Я предпочитаю использовать select *, когда драйвер языка или БД возвращает dict (Python, Perl и т. Д.) Или ассоциативный массив (PHP) результатов. Это облегчает понимание вашего кода, если вы ссылаетесь на столбцы по имени, а не как на индекс в массиве.

2 голосов
/ 04 ноября 2008

Обычно плохая идея использовать *. Некоторые механизмы сертификации кода помечают это как предупреждение и советуют явно ссылаться только на необходимые столбцы. Использование * может привести к появлению вшей, поскольку вам могут потребоваться только некоторые столбцы, а не все. Но, с другой стороны, в некоторых случаях использование * идеально. Представьте, что, несмотря на то, что, используя приведенный вами пример, для этого представления (aview) вам всегда будут нужны все столбцы в этих таблицах. В будущем, когда будет добавлен столбец, вам не нужно будет изменять вид. Это может быть хорошо или плохо в зависимости от ситуации, с которой вы имеете дело.

1 голос
/ 07 декабря 2010

И если у вас есть объединения с использованием select *, автоматически означает, что вы возвращаете больше данных, чем нужно, поскольку данные в полях объединения повторяются. Это расточительно базы данных и сетевых ресурсов.

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

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