Trước tiên, bạn nên xác minh rằng việc sắp xếp thực sự là một nút cổ chai về hiệu suất. Thời gian sắp xếp sẽ phụ thuộc vào số lượng phần tử được sắp xếp và số lượng cửa hàng cho một cửa hàng mẹ cụ thể có thể sẽ nhỏ. (Giả sử rằng toán tử sắp xếp được áp dụng sau khi áp dụng mệnh đề where).
Đó là một sự khái quát hóa quá mức. Thông thường, một toán tử sắp xếp có thể được di chuyển vào chỉ mục một cách đáng kể và nếu chỉ một vài hàng đầu tiên của tập kết quả được tìm nạp, có thể giảm đáng kể chi phí truy vấn, bởi vì cơ sở dữ liệu không còn phải tìm nạp tất cả các hàng phù hợp (và sắp xếp chúng tất cả) để tìm những cái đầu tiên, nhưng có thể đọc các bản ghi theo thứ tự tập hợp kết quả và dừng lại khi tìm thấy đủ các bản ghi.
Trong trường hợp của bạn, dường như bạn đang tìm nạp toàn bộ tập kết quả, vì vậy việc sắp xếp như vậy không có khả năng làm mọi thứ tồi tệ hơn nhiều (trừ khi tập kết quả là rất lớn). Ngoài ra, trong trường hợp của bạn, việc xây dựng một chỉ mục được sắp xếp hữu ích có thể không phải là chuyện nhỏ, vì mệnh đề where chứa dấu hoặc.
Bây giờ, nếu bạn vẫn muốn loại bỏ toán tử sắp xếp đó, bạn có thể thử:
SELECT [Phone]
FROM [dbo].[Store]
WHERE [ParentStoreId] = 10
AND [Type] in (0, 1)
ORDER BY [Phone]
Ngoài ra, bạn có thể thử chỉ mục sau:
CREATE NONCLUSTERED INDEX IX_Store ON dbo.[Store]([ParentStoreId], [Phone], [Type])
để thử yêu cầu trình tối ưu hóa truy vấn thực hiện quét phạm vi chỉ mục trên ParentStoreId
chỉ, sau đó quét tất cả các hàng phù hợp trong chỉ mục, xuất chúng nếu Type
diêm. Tuy nhiên, điều này có thể gây ra nhiều I / O ổ đĩa hơn và do đó làm chậm truy vấn của bạn hơn là tăng tốc độ.
Chỉnh sửa :Phương án cuối cùng, bạn có thể sử dụng
SELECT [Phone]
FROM [dbo].[Store]
WHERE [ParentStoreId] = 10
AND [Type] = 0
ORDER BY [Phone]
UNION ALL
SELECT [Phone]
FROM [dbo].[Store]
WHERE [ParentStoreId] = 10
AND [Type] = 1
ORDER BY [Phone]
với
CREATE NONCLUSTERED INDEX IX_Store ON dbo.[Store]([ParentStoreId], [Type], [Phone])
và sắp xếp hai danh sách trên máy chủ ứng dụng, nơi bạn có thể hợp nhất (như trong sắp xếp hợp nhất) các danh sách được sắp xếp trước, do đó tránh được việc sắp xếp hoàn chỉnh. Nhưng đó thực sự là một tối ưu hóa vi mô, trong khi tăng tốc độ sắp xếp theo thứ tự cường độ, không có khả năng ảnh hưởng nhiều đến tổng thời gian thực thi của truy vấn, vì tôi mong đợi nút cổ chai là mạng và I / O đĩa, đặc biệt là do đĩa sẽ thực hiện nhiều truy cập ngẫu nhiên vì chỉ mục không được phân cụm.