Bạn đang chọn 50 hàng hàng đầu được sắp xếp theo e.uon desc
. Chỉ mục bắt đầu bằng uon
sẽ tăng tốc truy vấn:
create index IX_Empl_Uon on dbo.empl (uon)
Chỉ mục sẽ cho phép SQL Server quét N hàng trên cùng của chỉ mục này. N là số cao nhất trong phân trang của bạn:đối với trang thứ 3 gồm 50 phần tử, N bằng 150. Sau đó, SQL Server thực hiện 50 lần tra cứu khóa để truy xuất các hàng đầy đủ từ chỉ mục được phân nhóm. Theo những gì tôi biết, đây là một ví dụ trong sách giáo khoa về nơi một chỉ mục có thể tạo ra sự khác biệt lớn.
Không phải tất cả các trình tối ưu hóa truy vấn đều đủ thông minh để nhận thấy rằng row_number() over ... as rn
với where
rn between 1 and 50
nghĩa là 50 hàng trên cùng. Nhưng SQL Server 2012 thì có. Nó sử dụng chỉ mục cho cả trang đầu tiên và trang liên tiếp, như row_number() between 50 and 99
.