В большой хранимой процедуре я создаю временную таблицу.
Затем я выбираю из этой временной таблицы после вставки в нее в различных точках.
Нет оператора 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%).
РЕДАКТИРОВАТЬ: Вот что я вижу.
Этовыбор кода из временной таблицы. Верхняя и нижняя строки печатают системное время:
Это вывод на печать, когда выбраны эти 2 столбца (один и тот же столбец):
Вот печатный вывод, когда выбирается только один столбец:
План выполнения для 2 столбцов:
План выполнения для 1столбец:
Наконец, если я выбираю Product_ID (int) 5 раз, он выполняется при 0-1 мс. Если я выбираю его 6 раз, он переходит к 190+ мс:
5x
6x