Luồng xử lý câu lệnh T-SQL trong SQL Server
Đăng lúc: 09:32 AM - 04/01/2024 bởi Charles Chung - 612Trong bài viết này tôi sẽ phân tích luồng xử lý câu lệnh T-SQL trong SQL Server, giúp các bạn có thể hiểu và tối ưu câu truy vấn trong các tình huống khác nhau.
Giới thiệu
Quá trình xử lý của SQL Server dựa trên việc thực thi truy vấn và hầu hết các vấn đề về hiệu suất đều liên quan đến các truy vấn được thực thi đối với SQL Server. Hình bên dưới thể hiện luồng thực hiện truy vấn được đơn giản hóa đến một mức nhất định để dễ hiểu hơn về các bước cơ bản trong quá trình thực hiện truy vấn. Mọi thực thi truy vấn đều bắt đầu bằng câu lệnh T-SQL thực tế và khi người dùng chạy câu lệnh, nó sẽ trải qua các bước thực thi như được trình bày chi tiết bên dưới:
Mô tả chi tiết các bước
- Statement: người dùng đã được xác thực và gửi câu lệnh T-SQL tới SQL Server
- Parser: SQL Server sẽ tiến hành phân tích bao gồm:
- Syntax check: Kiểm tra cú pháp câu lệnh T-SQL, nếu sai thông báo lỗi, nếu đúng đi tiếp bước Semantic
- Semantic check: Kiểm tra ngữ nghĩa câu lệnh T-SQL nếu sai báo lỗi, nếu đúng qua bước tiếp theo
- Algebrizer: Sau khi công cụ phân tích cú pháp xác minh câu lệnh T-SQL là hợp lệ, nó sẽ chuyển câu lệnh đó tới algebrizer. Algebrizer thực hiện các nhiệm vụ sau:
- Xác minh rằng các tên đối tượng và cột được cung cấp trong truy vấn hoặc được truy vấn tham chiếu tồn tại trong cơ sở dữ liệu đích. Nếu một đối tượng được tham chiếu trong tập lệnh T-SQL không tồn tại trong cơ sở dữ liệu, algebrizer sẽ trả về thông tin lỗi thích hợp.
- Kiểm tra và xác nhận rằng các cột trong câu lệnh GROUP BY được đặt đúng vị trí. Nếu không, algebrizer sẽ trả về lỗi.
- Nếu xác minh và kiểm tra đều đúng algebrizer chuyển qua kiểm tra xem câu lệnh T-SQL đã có Execute Plan trong Cached chưa, nếu có thì chuyển qua bước Execution và trả kết quả cho người dùng, nếu chưa có thì chuyển qua bước Optimization
- Optimazation: là trình tối ưu hóa truy vấn thực hiện tối ưu hóa đầy đủ dựa trên chi phí với sự trợ giúp của số liệu thống kê. Dựa trên những thông tin đầu vào đó, nó sẽ chuẩn bị kế hoạch thực thi SQL Server (Execution Plan) được tối ưu hóa về mặt chi phí.
- Execution: thực thi câu T-SQL đã được chuẩn bị trong Execution Plan và trả kết quả cho người dùng.
Một vài ví dụ
1. Ví dụ Syntax check
SELECT * FORM Books
Msg 102, Level 15, State 1, Line 2
Incorrect syntax near 'FORM'.
2. Ví dụ Semantic check
SELECT * FROM Book
Msg 208, Level 16, State 1, Line 2
Invalid object name 'Book'.
3. Ví dụ Algebrizer
SELECT CategoryId, Author, count(*) FROM Books
group by CategoryId
Msg 8120, Level 16, State 1, Line 2
Column 'Books.Author' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Kết luận: Như vậy là các bạn đã hiểu rõ các giai đoạn xử lý câu T-SQL trong SQL Server, các bạn có thể tham khảo thêm bài Thứ tự thực hiện câu lệnh Select trong SQL Server để hiểu thêm nhé
thay lời cảm ơn!
Các bài cũ hơn
- Sinh mã vạch QRCode và Bar Code 128 từ một chuỗi ký tự sử dụng thư viện ZXing trong .NET C# (09:44 AM - 02/01/2024)
- Đổi số tiền vnđ thành chữ trong C# và Java (09:29 AM - 01/01/2024)
- Tích hợp trình soạn thảo CKEditor và trình quản lý tệp tin elFinder trong Asp.Net Core MVC 6 (08:26 PM - 29/12/2023)
- Xử lý quay và dịch chuyển ảnh sử dụng OpenCV trong Python (10:48 PM - 27/12/2023)
- Làm thế nào để gửi email trong Asp.Net Core 6 sử dụng thư viện MailKit và MimeKit (03:01 PM - 27/12/2023)