Quá trình thực thi một câu lệnh SQL diễn ra như sau:
Quá trình trên có thể có đôi chút khác biệt tùy vào kiến trúc của từng loại database cụ thể.
Giải thích các bước:
- Câu lệnh SQL sẽ được gửi đến cho database thông qua TCP.
- Câu lệnh SQL sẽ được gửi đến command parser để phân tích cú pháp (syntax analysis) và phân tích ngữ nghĩa (semantic analysis). Ngoài ra, command parser còn kiểm tra quyền hạn của chủ thể thực hiện thao tác. Kết quả của bước này là một cây truy vấn (query tree).
- Query được gửi đến optimizer để tối ưu và để tạo ra execution plan.
- Execution plan được gửi đến cho executor để thực thi và lấy dữ liệu.
- Access methods sẽ cung cấp các logic giúp executor có thể lấy dữ liệu từ storage engine.
- Access methods sẽ quyết định xem câu lệnh SQL có phải là read-only hay không. Nếu câu lệnh là read-only thì nó sẽ được gửi cho buffer manager để xử lý. Buffer manager sẽ tìm kiếm dữ liệu ở trong cache và các file dữ liệu.
- Nếu câu lệnh là UPDATE hoặc INSERT thì nó sẽ được gửi cho transaction manager để xử lý.
- Trong quá trình xử lý transaction, dữ liệu sẽ bị khóa lại bởi lock manager nhằm đảm bảo các tính chất ACID.
Quá trình lược giản:
- Phân tách câu lệnh SQL và kiểm tra tính đúng đắn.
- Chuyển SQL thành một internal representation chẳng hạn như relational algebra (sau đó được chuyển thành query tree).
- Tối ưu internal representation và tạo ra execution plan mà tận dụng các thông tin về index.
- Thực thi execution plan và trả về kết quả.