Проблема с производительностью при выборе одного и того же столбца несколько раз - PullRequest
0 голосов
/ 03 октября 2019

В большой хранимой процедуре я создаю временную таблицу.

Затем я выбираю из этой временной таблицы после вставки в нее в различных точках.

Нет оператора WHERE, просто простое выделение.

  • Если я выберу один столбец, для возврата результатов потребуется 0 мс.
  • Если я выбираю один и тот же столбец дважды, для возврата результатов требуется 0 мс.
  • Если я выберу один и тот же столбец три раза, для возврата результатов потребуется более 200 мс.

Столбец VARCHAR (81)

Если увеличить размерстолбца, это не имеет значения.

0 мс

SELECT Product_Description FROM #Products

0 мс

SELECT Product_Description, Product_Description FROM #Products

200 мс

SELECT Product_Description, Product_Description, Product_Description FROM #Products

200 мс

SELECT Product_Description, Product_Description, Product_Description, Product_Description FROM #Products

Я не уверен, что есть что-то фундаментальное, чего я не понимаю SQL server но это можно повторить каждый раз.

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

РЕДАКТИРОВАТЬ: Вот что я вижу.

Этовыбор кода из временной таблицы. Верхняя и нижняя строки печатают системное время:

enter image description here

Это вывод на печать, когда выбраны эти 2 столбца (один и тот же столбец):

enter image description here

Вот печатный вывод, когда выбирается только один столбец:

enter image description here

enter image description here

План выполнения для 2 столбцов:

enter image description here

План выполнения для 1столбец:

enter image description here

Наконец, если я выбираю Product_ID (int) 5 раз, он выполняется при 0-1 мс. Если я выбираю его 6 раз, он переходит к 190+ мс:

5x

enter image description here

enter image description here

6x

enter image description here

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...