Tối ưu hóa truy vấn có tầm quan trọng lớn đối với hiệu suất của cơ sở dữ liệu quan hệ, đặc biệt là đối với việc thực thi các câu lệnh SQL phức tạp. Trình tối ưu hóa truy vấn quyết định các phương pháp tốt nhất để triển khai từng truy vấn.
Ví dụ, trình tối ưu hóa truy vấn chọn có sử dụng các chỉ mục cho một truy vấn nhất định hay không và các phương pháp nối nào sẽ sử dụng khi kết hợp nhiều bảng. Những quyết định này có ảnh hưởng to lớn đến hiệu suất SQL và tối ưu hóa truy vấn là công nghệ quan trọng cho mọi ứng dụng, từ Hệ thống vận hành đến kho dữ liệu và hệ thống phân tích đến hệ thống quản lý nội dung.
Có nhiều nguyên tắc khác nhau của Tối ưu hóa Truy vấn như sau -
-
Hiểu cách cơ sở dữ liệu của bạn đang thực thi truy vấn của bạn - Giai đoạn đầu tiên của việc tối ưu hóa truy vấn là hiểu cơ sở dữ liệu đang hoạt động gì. Các cơ sở dữ liệu khác nhau có các lệnh khác nhau cho việc này. Ví dụ, trong MySQL, người ta có thể sử dụng từ khóa “EXPLAIN [SQL Query]” để xem kế hoạch truy vấn. Trong Oracle, người ta có thể sử dụng “KẾ HOẠCH GIẢI THÍCH CHO [Truy vấn SQL]” để xem kế hoạch truy vấn.
-
Truy xuất càng ít dữ liệu càng tốt - Càng nhiều thông tin được khôi phục từ truy vấn, cơ sở dữ liệu càng cần nhiều tài nguyên để mở rộng để xử lý và lưu các bản ghi này. Ví dụ:nếu nó chỉ có thể yêu cầu tìm nạp một cột từ bảng, không sử dụng 'SELECT *'.
-
Lưu trữ kết quả trung gian - Đôi khi logic cho một truy vấn có thể khá phức tạp. Có thể tạo ra các kết quả mong muốn thông qua việc sử dụng các truy vấn con, dạng xem nội tuyến và các câu lệnh kiểu UNION. Đối với các phương pháp đó, kết quả chuyển tiếp không được lưu trong cơ sở dữ liệu mà được sử dụng trực tiếp trong truy vấn. Điều này có thể dẫn đến các vấn đề về thành tích, đặc biệt khi kết quả chuyển tiếp có số lượng hàng rất lớn.
Có nhiều chiến lược tối ưu hóa truy vấn khác nhau như sau -
-
Sử dụng chỉ mục - Có thể sử dụng một chỉ mục là chiến lược đầu tiên mà người ta nên sử dụng để tăng tốc một truy vấn.
-
Bảng tổng hợp - Nó có thể được sử dụng để điền trước các bảng ở các cấp cao hơn vì vậy cần ít lượng thông tin hơn để phân tích cú pháp.
-
Phân vùng dọc - Nó có thể được sử dụng để phân vùng bảng theo các cột. Phương pháp này làm giảm lượng thông tin mà một truy vấn SQL bắt buộc phải xử lý.
-
Phân vùng theo chiều ngang - Nó có thể được sử dụng để phân vùng bảng theo giá trị dữ liệu, thường là thời gian. Phương pháp này làm giảm lượng thông tin mà một truy vấn SQL bắt buộc phải xử lý.
-
Khử chuẩn hóa - Quá trình khử chuẩn hóa kết hợp nhiều bảng thành một bảng duy nhất. Điều này tăng tốc độ triển khai truy vấn vì cần ít phép nối bảng hơn.
-
Điều chỉnh máy chủ - Mỗi máy chủ có các tham số của nó và cung cấp các tham số điều chỉnh của máy chủ để nó hoàn toàn có thể tận dụng các tài nguyên phần cứng có thể tăng tốc đáng kể việc triển khai truy vấn.