Объединение предупреждений столбцов INT: преобразование типов в выражении вызывает предупреждения CardinalityEstimate в плане выполнения - PullRequest
1 голос
/ 06 апреля 2019

Запуск в SQL Server 2017 Developer Edition.

У меня есть простой случай, когда я пытаюсь взять два столбца INT и объединить их в один столбец с именем «NUMVER», разделенный точками с запятой.Хотя я мог бы рефакторировать вещи в приложении, чтобы сделать это по-другому, было бы интересно узнать, если это возможно, чтобы не рефакторинг и изменить синтаксис, чтобы он не вызывал "!"предупреждение в плане выполнения.

Подробности:

Таблица с именем «DOCS» имеет столбцы NUM и VER, оба INT плюс PK:

CREATE TABLE [dbo].[DOCS2](
    [DOCS_ID] [int] IDENTITY(1,1) NOT NULL,
    [NUM] [int] NOT NULL,
    [VER] [int] NOT NULL,
 CONSTRAINT [PK_DOCS] PRIMARY KEY CLUSTERED ([DOCS_ID] ASC)
)
GO

Некоторыеданные:

INSERT INTO dbo.DOCS (NUM, VER) VALUES (1,1);
INSERT INTO dbo.DOCS (NUM, VER) VALUES (2,1);

Я хочу выбрать NUM и VER в одном столбце NUMVER с разделителем точки с запятой:

SELECT CAST(NUM AS varchar(20)) + ';' + CAST(VER AS varchar(20)) AS "MENU" FROM DOCS;

Возвращенный результат в порядке, я получаю "1; 1 или«2; 1» и т. Д., Но я получаю предупреждения о плане выполнения:

Преобразование типов в выражении (CONVERT (varchar (20), [mydb]. [Dbo]. [DOCS]. [NUM], 0)) может повлиять на "CardinalityEstimate" при выборе плана запроса, может повлиять преобразование типа в выражении (CONVERT (varchar (20), [mydb]. [Dbo]. [DOCS]. [VER], 0)) "CardinalityEstimate "в выборе плана запроса

Приведенный выше пример является упрощенным примером более сложной, невероятно загруженной таблицы, и если это тривиальное предупреждение, отлично, я буду двигаться дальше, но я бы хотел получить«!» исчезнуть, если это возможно?

Примечание: я не наблюдал проблем с производительностью, я просто проактивен (или, возможно, слишком любопытен и осторожен).

Примечание 2: для ясности я добавил больше подробностей о сценарии, таких как создание таблицы DDL, и добавил несколько операторов вставки.

1 Ответ

1 голос
/ 08 апреля 2019

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

Там было элемент подключения "НовыйПреобразование типов в выражении ..... предупреждение в SQL2012, слишком шумное для практического использования ", в котором Microsoft ответила

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

Это было потеряно при закрытии соединения.Похожая жалоба есть на сайте UserVoice здесь .

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

Можно прыгнуть через несколько обручей, чтобы избавиться от него.Например,

SELECT FORMAT(NUM, 'N0') + ';' + FORMAT(VER, 'N0') 
FROM [DOCS2];

Но я не рекомендую это.FORMAT имеет свои проблемы (с производительностью), а применение ненужных FORMAT делает код менее читабельным.

...