Каковы преимущества/недостатки использования CTE?

StackOverflow https://stackoverflow.com/questions/54176

Вопрос

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

Это было полезно?

Решение

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

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top