Объединение таблиц с динамическими наборами данных - PullRequest
3 голосов
/ 06 февраля 2012

В моем запросе я хочу объединить динамический набор (получаемый на основе параметров) данных с существующей таблицей. Я исследовал, что было бы лучшим вариантом для завершения этого сценария, и закончил сужаться до 3 вариантов.

Просмотр, CTE, функция, CTE + функция

Запрос будет выглядеть примерно так:

select id from table
where id not in (select id from dynamic_set (param1, param2) )
  • При просмотре я должен извлечь все данные без возможности их фильтрации.
  • Функция должна выполняться для каждой строки в таблице, что может повлиять на производительность запроса.
  • Комбинация CTE и функции почти такая же, как и при использовании самой функции, только строки могут быть отфильтрованы и оптимизированы для немного лучшей производительности.
  • CTE является аналогом временной таблицы, поэтому мой вопрос заключается в большом наборе производительности по влиянию данных

Хотелось бы услышать ваше мнение о наилучшем из возможных решений

Спасибо за участие

1 Ответ

2 голосов
/ 06 февраля 2012

Представление не извлекает все данные, оно больше похоже на именованный запрос, доступный для использования с другими запросами. Когда представление фильтруется, оно просто добавляет этот фильтр к запросу, определенному в этом представлении.

Запрос CTE больше похож на локальное представление, на него можно ссылаться только там, где он определен (после; с). Кроме того, это не материализовано, и я не знаю никакого способа материализовать запрос CTE, как мы можем сделать с представлениями (путем добавления кластеризованного индекса).

Функция - худший вариант, вы сказали, почему. Я бы выбрал способ CTE, если «встроенный» запрос будет использоваться только здесь.

...