Bạn có thể áp dụng các bước kiểm tra cho câu SQL của bạn như sau:
Kiểm tra chỉ số (indexs)
Cần có các chỉ mục trên tất cả các trường được sử dụng trong các phần WHERE và JOIN của câu lệnh SQL.
Giới hạn kích thước của tập dữ liệu bạn bạn cần làm việc trên đó
Kiểm tra các bảng được sử dụng trong câu lệnh SELECT để xem bạn có thể áp dụng các bộ lọc trong mệnh đề WHERE của câu lệnh không. Một ví dụ kinh điển là khi một truy vấn ban đầu hoạt động tốt khi chỉ có vài nghìn hàng trong bảng. Khi ứng dụng phát triển, truy vấn chậm lại. Giải pháp có thể đơn giản như hạn chế truy vấn để xem dữ liệu tháng hiện tại. Khi bạn có các truy vấn có các truy vấn con (sub-query), hãy tìm cách áp dụng lọc cho câu lệnh bên trong của các truy vấn con này trái ngược với các câu lệnh bên ngoài.
Chỉ SELECT các fields bạn cần
Các trường bổ sung thường làm tăng số lượng dữ liệu được trả về và do đó dẫn đến có nhiều dữ liệu (chi tiết) hơn được trả về máy khách. Ngoài ra:
• Khi sử dụng các ứng dụng báo cáo và phân tích, đôi khi hiệu suất báo cáo chậm là do công cụ báo cáo phải thực hiện tổng hợp khi dữ liệu được nhận ở dạng chi tiết.
• Đôi khi, truy vấn có thể chạy đủ nhanh nhưng vấn đề của bạn có thể là sự cố liên quan đến mạng vì một lượng lớn dữ liệu chi tiết được gửi đến máy chủ trên mạng.
• Khi sử dụng DBMS hướng cột (column-oriented DBMS), chỉ các cột bạn đã chọn sẽ được đọc từ đĩa, càng ít cột bạn đưa vào truy vấn của bạn thì càng ít chi phí truy vấn IO.
Xóa các bảng không cần thiết
Các lý do để loại bỏ các bảng không cần thiết cũng giống như các lý do để loại bỏ các trường không cần thiết trong câu lệnh chọn.
Viết các câu lệnh SQL là một quá trình thường mất một số lần lặp đi lặp lại khi bạn viết và kiểm tra các câu lệnh SQL của mình. Trong quá trình đó, có thể bạn thêm các bảng vào truy vấn có thể không có bất kỳ tác động nào đến dữ liệu được trả về (nghĩa là dữ liệu vô nghĩa). Khi SQL chính xác, nhiều người không xem lại tập lệnh của họ và xóa các bảng không có ý nghĩa sử dụng nào trong tập dữ liệu được trả về. Bằng cách loại bỏ JOIN vào các bảng không cần thiết này, bạn sẽ giảm được lượng xử lý cơ sở dữ liệu phải làm. Giống như loại bỏ các cột bạn có thể thấy việc giảm dữ liệu trả về làm giảm hẳn xử lý cho cơ sở dữ liệu.
Xóa các OUTER JOIN
Điều này có thể nói dễ hơn làm và phụ thuộc vào mức độ ảnh hưởng của bạn trong việc thay đổi nội dung bảng. Một giải pháp là loại bỏ OUTER JOINs bằng cách đặt các hàng giữ chỗ trong cả hai bảng. Giả sử bạn có các bảng sau với OUTER JOIN được dùng để đảm bảo tất cả dữ liệu được trả về:
Customers table :
Code: Select all
+----------+------------------+
|CustomerId| CustomerName |
+----------+------------------+
|1 | John Doe |
|2 | Mary Jane |
|3 | Peter Pan |
|4 | Joe Soap |
+----------+------------------+
Code: Select all
+----------+------------------+
|CustomerId| SalesPerson |
+----------+------------------+
|NULL | Newbee Smith |
|2 | Oldie Jones |
|1 | Another Oldie |
|NULL | Greenhorn |
+----------+------------------+
Customers table :
Code: Select all
+----------+------------------+
|CustomerId| CustomerName |
+----------+------------------+
|0 | NO CUSTOMER |
|1 | John Doe |
|2 | Mary Jane |
|3 | Peter Pan |
|4 | Joe Soap |
+----------+------------------+
Code: Select all
+----------+------------------+
|CustomerId| SalesPerson |
+----------+------------------+
|0 | Newbee Smith |
|2 | Oldie Jones |
|1 | Another Oldie |
|0 | Greenhorn |
+----------+------------------+
Xóa các trường được tính toán trong mệnh đề JOIN và WHERE
Đây là một trong những điều mà đôi khi có thể nói dễ hơn làm tùy thuộc vào quyền của bạn để thực hiện thay đổi cho schema. Điều này có thể được thực hiện bằng cách tạo một trường với các giá trị được tính toán được sử dụng trong phép nối trên bảng. Ví dụ câu lệnh SQL sau:
Code: Select all
SELECT *
FROM sales a
JOIN budget b ON ((year(a.sale_date)* 100) + month(a.sale_date)) = b.budget_year_month
Code: Select all
SELECT *
FROM sales a
JOIN budget b ON a.sale_year_month = b.budget_year_month
Chốt lại các gợi ý bên trên tóm gọn như sau:
1. kiểm tra chỉ số
2. làm việc với tập dữ liệu nhỏ nhất cần thiết
3. loại bỏ các trường và bảng không cần thiết
4. xóa các tính toán trong mệnh đề JOIN và WHERE của bạn.