План запроса T-SQL, который поможет выбрать наилучшую форму запроса?

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

  •  18-09-2019
  •  | 
  •  

Вопрос

У меня есть простая таблица регистрации данных с двумя столбцами данных A и B, для которых я хочу сгенерировать сумму A + B.Однако любой из A и B или оба A и B могут быть нулевыми.В таблице также есть столбец метки времени, который является первичным ключом

Я могу видеть несколько способов освежевать этого кота, но мне было любопытно узнать, каким может быть предпочтительный метод суммирования данных по диапазону временных меток:

1. SUM(Coalesce(A,0)+Coalesce(B,0))

2. SUM(Coalesce(A+B,A,B,0))

3. Coalesce( Sum(A), 0) + Coalesce( SUM(B), 0)

Я получаю следующие результаты от планировщика выполнения:

Form Select    Compute Scalar  Stream Aggregate  Compute Scaler Clustered Index Seek
  1     0%          0%                11%             1%                 87%    
  2     0%          0%                11%             1%                 87%    

Form Select    Compute Scalar  Compute Scaler Stream Aggregate  Clustered Index Seek
  3     0%          0%                0%             12%                 88%    

Я никогда раньше особо не вникал в планы запросов, поэтому не уверен, как интерпретировать цифры.Будет ли справедливо сказать, что в целом, чем больше смещен вправо общий процент искажения, тем лучше?Улучшаете ли форму 3 по сравнению с 1 и 2?

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

Решение

Оптимизируйте для ожидаемого случая.

Здесь, если и A, и B большую часть времени имеют значения, то # 2 должен работать лучше, потому что слияние достигнет этого первого значения и остановится.Если A или B очень часто имеют значение NULL, вы могли бы немного лучше использовать # 1.Ключевым моментом здесь, как всегда, является попробовать и то, и другое и спрофилировать фактическое время на основе фактических данных.

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