Как избежать неявного преобразования типов - PullRequest
1 голос
/ 21 июня 2020

Я пытаюсь использовать функцию STRING_AGG в столбце INT. И получение предупреждения о неявном преобразовании типа. Я думаю, это влияет на производительность моего запроса. Как я могу этого избежать?

Вот запрос:

SELECT
     STRING_AGG(ES.SomeIntID, '#') AS Something
     FROM SomeTable 
     GROUP BY OtherID

Я пытался явно преобразовать / преобразовать значение SomeIntID в INT и NVARCHAR (12), но без улучшений.

Предупреждение:

convert_issue: Оценка мощности выражение: CONVERT (nvarchar (12), SomeIntID, 0)

Это важно, так как эта функция используется в запросе несколько раз. Я думаю, что это преобразование увеличивает и мое логическое чтение WorkFile / WorkTable.

Попытка запроса для преобразования:

STRING_AGG(CAST(ES.SomeIntID as nvarchar(12)), N'#') AS Something

И

STRING_AGG(CAST(ES.SomeIntID as varchar(12)), '#') AS Something

1 Ответ

2 голосов
/ 21 июня 2020

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

Преобразование типа в выражении (CONVERT_IMPLICIT (nvarchar (12), [t]. [Task_id], 0)) может повлиять на «CardinalityEstimate» в выборе плана запроса

См. этот план запроса

Если преобразование повлияло на оценку количества элементов, то предполагаемое количество строк будет значительно отличается от фактического количества строк, но в данном случае они равны.

Пожалуйста, посмотрите на примерное и фактическое количество строк, чтобы узнать, может ли это повлиять на оценку мощности.

Также замените STRING_AGG(ES.SomeIntID, '#') AS Something на SUM(ES.SomeIntId) AS AnythingElse, чтобы увидеть, отличаются ли планы запросов и разные оценки количества элементов.

...