Представления могут быть вредными для производительности, когда представление содержит логику, столбцы, строки или таблицы, которые в конечном итоге не используются вашим окончательным запросом. Я не могу сказать вам, сколько раз я видел такие вещи, как:
SELECT ...
FROM (View with complex UNION of ActiveCustomer and InactiveCustomer tables)
WHERE Active = True
(таким образом, отфильтровывая все строки, которые были включены в вид из таблицы InactiveCustomer) или
SELECT (one column)
FROM (view that returns 50 columns)
(SQL должен получить много данных, которые затем отбрасываются на более позднем этапе. его возможные эти другие столбцы являются дорогостоящими, чтобы получить, как через закладку поиск), или
SELECT ...
FROM (view with complex filters)
WHERE (entirely different filters)
(его вероятно, что SQL может иметь использовал более соответствующий индекс, если таблицы были запрошены непосредственно), или
SELECT (only fields from a single table)
FROM (view that contains crazy complex joins)
(много накладных расходов процессора через объединение и ненужные IO для таблицы чтения, которые позже отбрасывается), или моим любимый:
SELECT ...
FROM (Crazy UNION of 12 tables each containing a month of data)
WHERE OrderDate = @OrderDate
(Читает 12 таблиц, когда это действительно нужно прочитать 1).
В самых случаев, SQL достаточно умен, чтобы «видеть сквозь крышки» и в любом случае придумать эффективный план запроса. Но в других случаях (особенно очень сложных) он не может. В каждой из вышеперечисленных ситуаций ответ заключался в том, чтобы удалить представление и запросить базовые таблицы.
В крайней мере (даже если вы думаете, SQL будет достаточно умен, во всяком случае, чтобы оптимизировать его), устраняя мнение иногда может сделать свою собственную отладку и оптимизацию проще запроса (немного более очевидным, что должно быть сделано) ,
+1 В моем опыте есть невероятное количество невежества и дезинформации о дб взглядов. Могут быть много разговоров о том, что делают взгляды и как, но я не уверен, что они созданы таким образом, и если ответы очевидны. –
@Mr Shoubs - Я думаю, что люди задают вопросы здесь, даже если ответ легко встречается в Google, потому что они хотят интерактивности и последующих действий/Q & A, которые SO обеспечивает, и я не думаю, что мы должны отговаривать это. – JNK
@Paul - избили меня! – JNK