В последнее время я столкнулся с шаблоном (не уверен, может быть анти-шаблоном) сортировки данных в запросе SELECT. Шаблон более подробный и не декларативный способ упорядочения данных. Шаблон состоит в том, чтобы выгрузить релевантные данные из фактической таблицы во временную таблицу, а затем применить orderby в поле во временной таблице. Полагаю, единственная причина, почему кто-то будет делать это, - это улучшить производительность (что я сомневаюсь) и никакой другой выгоды.Использование таблицы temp для сортировки данных в SQL Server
См., Например, Скажем, есть таблица пользователей. Таблица может содержать строки в миллионах. Мы хотим получить всех пользователей, чье имя начинается с «G» и сортируется по имени. Естественный и более декларативный способ реализации SQL запроса для этого сценария:
Более естественный и декларативный способ
SELECT * FROM Users
WHERE NAME LIKE 'G%'
ORDER BY Name
Многословный путь
SELECT * INTO TempTable
FROM Users
WHERE NAME LIKE 'G%'
SELECT * FROM TempTable
ORDER BY Name
С этой связи я есть несколько вопросов:
Будет ли разница в производительности между двумя способами, если есть без индекса на поле имени. Если да, то какой будет лучше.
Будет ли разница в производительности между двумя способами, если есть индекс на поле имени. Если да, то какой будет лучше.
Не должен ли оптимизатор SQL Server создавать одинаковый план выполнения для обоих способов?
Есть ли какая-либо польза в написании многословного пути от любых других перфективных, таких как блокировка/блокировка?
Заранее спасибо.
Единственное преимущество, которое я вижу в этом случае, заключается в том, что мы хотим сортировать столбец, который не индексируется в родительской таблице. – Dimitri
В контексте, где вы видели шаблон, вы проверили оба пути? Используется ли временная таблица в других вариантах? – Paparazzi
@Blam: У меня не возникло твоего вопроса. Я не сравнивал производительность. Я только что видел вышеупомянутый оператор SQL (многословный путь), и вопрос пришел ко мне. Я не мог убедить себя, что это может помочь в улучшении производительности. –