Я заполнил 1.000.000 тестовых данных в таблицу Студенты , а затем начал тестировать следующие запросы:
Примечание Не использовать DBCC DROPCLEANBUFFERS
оценка в производственной среде.
Тестовая среда:
Microsoft SQL Server 2019 (RC1) - 15.0.1900.25 (X64) 16 августа 2019 14:20: 53 Copyright (C) 2019 Microsoft Corporation Developer Edition (64-разрядная версия) в Windows 10 Pro 10.0 (сборка 17763:)
Test-1:
Следующий запрос занимает 34 секунд .
DBCC DROPCLEANBUFFERS
GO
SELECT StudentName, Course, Score
FROM Students
CROSS APPLY (
VALUES
('Math', Math),
('English', English),
('History', History),
('Science', Science)
) x(Course, Score)
WHERE Score IS NOT NULL
OPTION (MAXDOP 1)
Test-2:
Следующий запрос занимает 40 секунд .
DBCC DROPCLEANBUFFERS
GO
SELECT StudentName, Course, Score
FROM Students
CROSS APPLY (
VALUES
('Math', Math),
('English', English),
('History', History),
('Science', Science)
) x(Course, Score)
WHERE Score IS NOT NULL
OPTION (MAXDOP 1)
Test-3:
Следующий запрос занимает 32 секунд после создания индекса, также план выполнения использует созданный индексв плане выполнения.
CREATE NONCLUSTERED INDEX [PerformanceIndex] ON [dbo].[Students]
(
[Id] ASC,
[Math] ASC,
[English] ASC,
[History] ASC,
[Science] ASC
)
INCLUDE([StudentName])
GO
DBCC DROPCLEANBUFFERS
GO
SELECT StudentName, Course, Score
FROM Students
UNPIVOT
(
Score
FOR Course in (Math, English, History, Science)
) AS SchoolUnpivo
OPTION (MAXDOP 1)
В результате использование столбцов разворачивания в некластеризованном индексе помогает нам повысить производительность запросов, в частностидля этого случая.