(относительно новый для SQL) член моей команды работал над написанием SQL-запроса, в котором использовалась оконная функция. При просмотре я заметил, что они структурировали свою оконную функцию следующим образом:
COUNT(*) OVER(PARTITION BY Part1+Part2) AS A
. Я немедленно сделал замечание обратной связи, чтобы сказать, что это должно быть так:
COUNT(*) OVER(PARTITION BY Part1, Part2) AS A
И Part1, и Part2nvarchars.
Затем я сделал паузу, чтобы подумать, и я не мог понять , почему это было бы неправильно. Насколько я вижу, это на самом деле даст идентичные результаты (это так). Фактический план выполнения практически идентичен, за исключением дополнительного шага Compute Scalar после первоначального сканирования таблицы по первому запросу (это 0% от стоимости запроса). Статистика ввода / вывода показывает, что в первой версии меньше логических операций чтения (от 12 665 до 12 670).
Так есть ли польза / ущерб в использовании любой из форм, помимо соглашений о кодировании? Является ли это случаем, что это работает нормально в этом случае, но при определенных обстоятельствах может привести к противоречивым результатам?