Query plan là gì?

Phrase Database

Query plan là danh sách các lệnh được tạo bởi query optimizer mà cơ sở dữ liệu (database) cần tuân theo để thực hiện một truy vấn (query) trên dữ liệu. Dưới đây là một query plan cho một truy vấn nhất định:

Query plan này hiển thị các bước cụ thể được thực hiện để thực thi lệnh đã cho. Nó cũng chỉ định chi phí (cost) dự kiến cho mỗi phần.

Query optimizer

SQL là một ngôn ngữ khai báo (declarative language) có nghĩa là các truy vấn SQL mô tả những gì (WHAT) người dùng muốn và sau đó truy vấn được query optimizer chuyển thành các lệnh thực thi. Các lệnh thực thi đó được gọi là query plan.

Query optimizer tạo nhiều query plan cho một truy vấn và xác định query plan hiệu quả nhất để chạy.

Thường có nhiều cách khác nhau để tìm kiếm cơ sở dữ liệu. Lấy ví dụ cơ sở dữ liệu sau đây của các tool có năm bản ghi (record). Mỗi bản ghi có một số ID duy nhất và một name không duy nhất.


SELECT *
FROM tools
WHERE name='Screwdriver';

Sẽ sẽ ra cùng kết quả như truy vấn bên dưới


SELECT *
FROM tools
WHERE id=3;

Scan so với Seek

Các truy vấn này sẽ trả về cùng một kết quả, nhưng có thể có các query plan cuối cùng khác nhau. Truy vấn đầu tiên sẽ có một query plan sử dụng một sequential scan. Điều này có nghĩa là tất cả năm bản ghi của cơ sở dữ liệu sẽ được kiểm tra xem name có phải là screwdriver hay không và khi chạy sẽ giống như bảng sau:

Truy vấn thứ hai sẽ sử dụng một query plan sử dụng một sequential seek vì truy vấn thứ hai xử lý các giá trị duy nhất. Giống như sequential scan, sequential seek sẽ đi qua từng bản ghi và kiểm tra xem điều kiện có được đáp ứng hay không. Tuy nhiên, không giống như sequential scan, sequential seek sẽ dừng lại sau khi tìm thấy bản ghi phù hợp. Một tìm kiếm cho ID = 3 sẽ giống như hình sau:

Sequential seek này chỉ cần kiểm tra ba bản ghi để trả về kết quả không giống như sequential scan phải kiểm tra toàn bộ cơ sở dữ liệu.

Learning English Everyday