Каковы преимущества / недостатки использования CTE? - PullRequest
3 голосов
/ 10 сентября 2008

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

Ответы [ 2 ]

6 голосов
/ 16 сентября 2008

Вам действительно придется тестировать производительность - нет ответа Да / Нет. Согласно приведенному выше сообщению Энди Ливинга, CTE - это просто сокращение для запроса или подзапроса.

Если вы вызываете его дважды или более в одной и той же функции, производительность может быть выше, если вы заполните табличную переменную и затем присоединитесь к / выберите из этого. Однако, поскольку табличные переменные занимают место где-то и не имеют индексов / статистики (за исключением любого объявленного первичного ключа в табличной переменной), невозможно сказать, что будет быстрее.

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

2 голосов
/ 10 сентября 2008

Наверное, нет. CTE особенно хороши при запросе данных для древовидных структур.

...