Các truy vấn SQL phức tạp là tuyệt vời để thực hiện các tìm kiếm cơ sở dữ liệu rất cụ thể và linh hoạt, nhưng chúng cũng có thể khó hiểu và hầu như không thể gỡ lỗi — và bạn cũng có thể quên việc sử dụng lại chúng.
Khi các truy vấn vượt ra ngoài các lệnh SELECT và WHERE tiêu chuẩn của bạn, bạn thậm chí có thể thấy hiệu suất của SQL Server bắt đầu bị ảnh hưởng vì trình tối ưu hóa truy vấn gặp khó khăn khi xử lý các truy vấn phức tạp và dài.
Nếu bạn nhận thấy rằng các truy vấn SQL của mình sử dụng quá nhiều phép nối phức tạp và truy vấn phụ, lồng các truy vấn trong mệnh đề WHERE và dựa vào rất nhiều mệnh đề VÀ và HOẶC, có lẽ đây là thời điểm tốt để lùi lại và tìm cách giảm thiểu một số phức tạp.
Mẹo để giảm thiểu độ phức tạp của truy vấn SQL Server
Như chúng tôi đã đề cập ở trên, các trình tối ưu hóa truy vấn SQL Server không yêu thích các truy vấn SQL phức tạp. Dưới đây là năm cách để làm cho các truy vấn của bạn ít phức tạp hơn để chúng có thể được tối ưu hóa để cải thiện hiệu suất.
1. Loại bỏ các điều khoản HOẶC khi có thể
Cách dễ nhất để làm cho các truy vấn ít phức tạp hơn là loại bỏ các mệnh đề OR bất cứ khi nào có thể. Bởi vì OR là bao gồm, SQL Server phải xử lý từng thành phần của mệnh đề riêng biệt, điều này thực sự làm chậm hoạt động.
Khi không thể xóa HOẶC, tùy chọn tốt nhất tiếp theo là chia các truy vấn dài, phức tạp thành các truy vấn nhỏ hơn. Có vẻ hơi phản trực giác khi xử lý nhiều truy vấn nhanh hơn xử lý một truy vấn, nhưng khi nói đến HOẶC, tốt hơn là bạn nên thực hiện với nhiều truy vấn.
2. Tìm kiếm chuỗi tinh chỉnh
SQL Server làm tốt nhiều thứ, nhưng tìm kiếm chuỗi mờ không phải là một trong số đó. Tìm kiếm chuỗi ký tự đại diện, đặc biệt là trên các bảng lớn, không hiệu quả và không tốt cho hiệu suất.
Có một số chỉnh sửa bạn có thể áp dụng cho các tìm kiếm theo chuỗi để giúp giảm thiểu tác động đến hiệu suất.
- Sử dụng tìm kiếm chuỗi đứng đầu thay vì tìm kiếm theo ký tự đại diện (tức là thay đổi “% For%” thành “For%”)
- Áp dụng các bộ lọc như ngày hoặc giờ cho truy vấn để giảm kích thước dữ liệu trước khi chạy tìm kiếm chuỗi
- Áp dụng lập chỉ mục toàn văn bản để tạo các chỉ mục cho phép tìm kiếm chuỗi linh hoạt trên các cột văn bản
3. Chú ý đến các hoạt động ghi lớn
Các hoạt động ghi lớn gây ra tranh cãi và tạo ra rất nhiều tệp nhật ký. Nếu không được chọn, các hoạt động ghi lớn có thể chặn tài nguyên từ người dùng và tạo ra các vấn đề về độ trễ cũng như lấp đầy nhật ký giao dịch hoặc thậm chí là bộ nhớ vật lý.
Vì không phải lúc nào bạn cũng có thể tránh được các thao tác ghi lớn, hãy lưu ý khi nào bạn chạy chúng (máy chủ càng ít bận thì càng tốt) hoặc giảm số hàng được sửa đổi cho mỗi thao tác để giảm thiểu nguy cơ tranh chấp.
4. Xóa chỉ mục
Chỉ mục là một trong những thủ phạm chính khi nói đến hiệu suất kém, nhưng khi bạn đang cố gắng tối ưu hóa các truy vấn SQL phức tạp, chỉ mục yêu cầu một số cân nhắc đặc biệt.
SQL Server có một số công cụ cho bạn biết khi nào các chỉ mục bị thiếu đang ảnh hưởng đến hiệu suất truy vấn. Nhưng trước khi bắt đầu thêm chỉ mục, bạn cần xác định xem liệu chỉ mục bổ sung có cải thiện truy vấn đủ để khiến nó xứng đáng với nỗ lực hay không. Ví dụ:nếu truy vấn chạy 1 triệu lần một ngày và chỉ mục cải thiện nó 25 phần trăm, thì nó có thể đáng giá. Nếu truy vấn hiếm khi được sử dụng, nó có thể không có ý nghĩa.
Một số điều khác cần xem xét trước khi bạn bắt đầu thêm chỉ mục là liệu các chỉ mục hiện có có thể được tinh chỉnh để phù hợp với trường hợp sử dụng này mà không cần thêm mới hay không và liệu chỉ mục này đã tồn tại nhưng trình tối ưu hóa đang bỏ qua nó vì lý do nào đó hay không.
Các cách khác mà chỉ mục có thể ảnh hưởng đến hiệu suất truy vấn là các bảng và bảng được lập chỉ mục quá mức hoặc thấp hơn thiếu chỉ mục được phân nhóm hoặc khóa chính. Giải quyết những vấn đề này sẽ giúp hiệu suất truy vấn SQL phức tạp.
5. Giữ bảng đếm ngược
Mỗi khi bạn thêm một bảng vào một truy vấn, truy vấn sẽ trở nên phức tạp hơn. Quá nhiều bảng thường dẫn đến kế hoạch thực thi kém vì trình tối ưu hóa truy vấn không thể hoạt động hiệu quả.
Nếu bạn nhận thấy một truy vấn phức tạp đang hoạt động kém và có rất nhiều bảng, đây có thể là một trong những thời điểm khi chia nhỏ truy vấn thành các truy vấn nhỏ hơn là lựa chọn tốt nhất vì nó sẽ giảm bớt một số gánh nặng cho trình tối ưu hóa.
Công cụ điều chỉnh hiệu suất có thể giúp giảm thiểu độ phức tạp của máy chủ SQL
Khi các truy vấn phức tạp làm hỏng trình tối ưu hóa truy vấn, bạn thường kết thúc với một kế hoạch thực thi không hiệu quả và hiệu suất bị ảnh hưởng. Ngoài các mẹo ở trên, các công cụ điều chỉnh hiệu suất là tài nguyên có giá trị để giảm thiểu độ phức tạp của truy vấn SQL Server và tối ưu hóa hiệu suất.
Dưới đây là một số khả năng cần tìm khi nghiên cứu các giải pháp điều chỉnh hiệu suất.
Phân tích kế hoạch thực thi SQL Server
Công cụ điều chỉnh sẽ phân tích kế hoạch thực thi của bạn và xác định những gì cần thay đổi để SQL Server thực thi các hoạt động hiệu quả hơn.
Hình ảnh hóa kế hoạch thực thi SQL Server
Công cụ điều chỉnh phải trình bày kế hoạch thực thi theo cách dễ hiểu và giúp bạn xác định vị trí các hoạt động đang làm chậm quá trình thực thi.
Tối ưu hóa SQL tự động
Công cụ điều chỉnh sẽ phân tích SQL của bạn, sau đó tự động viết lại nó cho đến khi cải thiện thời gian thực thi tối đa.
So sánh các câu lệnh SQL gốc và được tối ưu hóa
Công cụ điều chỉnh phải làm nổi bật các thay đổi trong câu lệnh SQL để bạn có thể so sánh các phiên bản gốc và phiên bản được tối ưu hóa trước khi triển khai các thay đổi.
So sánh các kế hoạch thực thi SQL Server
Các công cụ điều chỉnh sẽ cung cấp sự so sánh giữa các kế hoạch thực thi ban đầu và được tối ưu hóa để bạn biết những gì đã thay đổi giữa các phiên bản.
Bằng chứng thống kê
Công cụ điều chỉnh của bạn sẽ cung cấp dữ liệu cho thấy lý do tại sao SQL được tối ưu hóa thực thi nhanh hơn câu lệnh SQL ban đầu.
Các truy vấn SQL Server phức tạp có thể có tác động tiêu cực đến hiệu suất hệ thống. Sử dụng các mẹo này và giải pháp điều chỉnh hiệu suất chất lượng cao để làm sạch sự phức tạp và tối ưu hóa hiệu quả truy vấn SQL của bạn.