Đang chuẩn bị liên kết để tải về tài liệu:
Các Cơ Chế Thực Thi Lệnh JOIN Tiếp theo bài Các Loại JOIN Trong SQL Server, bài này
Đang chuẩn bị nút TẢI XUỐNG, xin hãy chờ
Tải xuống
Các Cơ Chế Thực Thi Lệnh JOIN Tiếp theo bài Các Loại JOIN Trong SQL Server, bài này giới thiệu về các cơ chế bên trong SQL Server sử dụng để xử lý các câu truy vấn JOIN. Về cơ bản khi thực hiện câu lệnh JOIN, SQL Server duyệt qua hai bảng tham gia vào, lấy ra từng cặp bản ghi để so sánh, rồi trả về tập kết quả nếu thỏa mãn điều kiện JOIN hoặc loại bỏ nếu không thỏa mãn. | Các Cơ Chế Thực Thi Lệnh JOIN Tiếp theo bài Các Loại JOIN Trong SQL Server bài này giới thiệu về các cơ chế bên trong SQL Server sử dụng để xử lý các câu truy vấn JOIN. Về cơ bản khi thực hiện câu lệnh JOIN SQL Server duyệt qua hai bảng tham gia vào lấy ra từng cặp bản ghi để so sánh rồi trả về tập kết quả nếu thỏa mãn điều kiện JOIN hoặc loại bỏ nếu không thỏa mãn. SQL Server cài đặt một vài thuật toán khác nhau thích hợp với các tình huống khác nhau như số lượng bản ghi cần so sánh nhiều hay ít cột JOIN có index hay không. . Các thuật toán đó là Nested Loop Join Merge Join và Hash Join. Nested Loop Join Đây là thuật toán rất đơn giản và cũng rất hiệu quả đối với tập dữ liệu nhỏ nó lấy mỗi bản ghi trong một bảng gọi là inner table và so sánh với từng bản ghi của bảng kia gọi là outer table để tìm ra bản ghi thỏa mãn. Thuật toán này có thể được viết ở dạng pseodo-code như sau Code for each row R1 in the outer table for each row R2 in the inner table if R1.join_column R2.join_column retUrn R1 R2 copy từ Craig Freedman s Blog Ví dụ 1 Code USE AdventureWorkds GO SELECT a.SalesOrderDetailID b.Name FROM Sales.SalesOrderDetail a JOIN Production.Product b ON a.ProductID b.ProductID WHERE a.SalesOrderID 43659 Trong phương án thực thi ở hình trên bạn thấy hai thao tác Clustered index seek bảng ở thao tác trên luôn luôn là outer table và bảng dưới luôn là inner table. Vì số bản ghi được trả về là nhỏ bộ Optimizer đã chọn Nested Loop Join. Nói chung Nested Loop Join thích hợp khi outer table có số bản ghi nhỏ và inner table đã được sắp xếp theo trường được JOIN ví dụ trường này có clustered index . Khi đó việc quét bảng inner table vòng lặp trong trở thành index seek. Khi xây dựng phương án thực thi bộ Optimizer sẽ tự động chọn một bảng làm outer table và bảng kia làm inner table theo cách để đảm bảo chi phí là nhỏ nhất. Nested Loop Join là thao tác join bạn mong đợi xuất hiện nhất trong phương án thực thi vì nó chứng tỏ câu truy vấn được thực hiện hiệu quả và có chi phí .