SQL-CTE vs VIEW
мой вопрос вот в чем разница между CTE
и View
на SQL. Я имею в виду, что в этом случае я должен использовать CTE
и в этом случае View
. Я знаю, что оба являются своего рода виртуальными таблицами, но я не могу различать их использование.
Я нашел аналогичный вопрос здесь но речь идет о производительности.
обновление 1:
например: у меня есть база данных, заполненная сделки(tbl_trade
). Мне нужно выбрать из 3,5 миллионов записей только те сделки, которые были открыты в текущем месяце до текущего времени, а затем манипулировать данными(с разными запросами в виртуальной таблице - это похоже на представление). Проблема здесь в том, что я хочу SUM
3-4 столбцов, а затем мне нужно SUM
некоторые столбцы и создать виртуальный столбец с результатом (выглядит как CTE).
например: tbl_trade
есть столбцы: profit
,bonus
и expenses
.
Мне нужно SUM(profit)
,SUM(bonus)
,SUM(expenses)
и новый колонка total
который будет равен SUM(profit)
+SUM(bonus)
+SUM(expenses)
.
PS. Повторный запуск запросов для SUM
это не вариант, так как у меня уже есть результат.
спасибо заранее!
3 ответов
представления могут быть индексированы, но CTE не может. Так что это один важный момент.
CTE отлично работает на tree hierarchy
т. е. рекурсивный
кроме того, учитывайте представления при работе со сложными запросами. Представления, являющиеся физическим объектом в базе данных (но не хранящие данные физически) и могут использоваться в нескольких запросах, что обеспечивает гибкость и централизованный подход. CTE, с другой стороны, являются временными и будут созданы, когда они используются; вот почему они называются inline view
.
обновление
согласно вашему обновленному вопросу, представления будут правильным выбором. Работа с 3,5 миллионами строк в CTE создаст дополнительные накладные расходы на TempDb, что в конечном итоге замедлит производительность SQL Server. Помните, что CTE-это одноразовое представление, поэтому статистика не сохраняется, и вы также не можете создавать индексы. Это похоже на подзапрос.
Как будет интерпретироваться точно так же, оптимизатором плана. Это совсем другое дело.
представление можно использовать самостоятельно. Он может инкапсулировать сложные операторы в более простой запрос.
Were CTE в основном используется для написания более чистого кода с меньшей избыточностью в процедурах / представлениях, например. Вы также можете использовать CTE для рекурсивных запросов, что является очень большой и мощной функцией!
надеюсь, это поможет прояснить ситуацию.
одна из причин выбора CTE: если вы выполняете иерархический запрос, используйте CTEs. CTEs можно вызвать рекурсивно. Представления нельзя вызывать рекурсивно.