Tôi tò mò về cách chính xác LINQ (không LINQ to SQL) đang thực hiện là tham gia phía sau hậu trường liên quan đến cách Sql Server thực hiện kết nối.LINQ tham gia - Hiệu suất
Sql Server trước khi thực hiện truy vấn, tạo ra một kế hoạch thực thi. Kế hoạch thực hiện về cơ bản là một cây biểu hiện trên những gì nó tin là cách tốt nhất để thực hiện truy vấn. Mỗi nút cung cấp thông tin về việc có nên thực hiện Sắp xếp, Quét, Chọn, Tham gia, vv.
Trên nút 'Tham gia' trong kế hoạch thực hiện của chúng tôi, chúng tôi có thể thấy ba thuật toán có thể có; Tham gia Hash, Merge Join và Nested Loops Tham gia. Sql Server sẽ chọn thuật toán cho mỗi phép nối tham gia dựa trên số hàng dự kiến trong bảng bên trong và bên ngoài, loại tham gia mà chúng ta đang làm (một số thuật toán không hỗ trợ tất cả các kiểu kết nối), cho dù chúng ta cần dữ liệu có lẽ nhiều yếu tố khác.
Tham Algorithms:
Nested Vòng Tham gia: tốt nhất cho đầu vào nhỏ, có thể được tối ưu hóa với bảng bên đặt hàng.
Hợp nhất Tham gia: Tốt nhất cho đầu vào trung bình đến lớn được sắp xếp đầu vào hoặc đầu ra cần được đặt hàng.
Hash Tham gia: Tốt nhất cho các đầu vào từ trung bình đến lớn, có thể song song với quy mô tuyến tính.
LINQ Query:
DataTable firstTable, secondTable;
...
var rows = from firstRow in firstTable.AsEnumerable()
join secondRow in secondTable.AsEnumerable()
on firstRow.Field<object> (randomObject.Property)
equals secondRow.Field<object> (randomObject.Property)
select new {firstRow, secondRow};
SQL Query:
SELECT *
FROM firstTable fT
INNER JOIN secondTable sT ON fT.Property = sT.Property
Sql Server có thể sử dụng một Nested Vòng Tham gia nếu nó biết có một số ít hàng từ mỗi bảng, một hợp nhất tham gia nếu nó biết một trong các bảng có chỉ mục và Hash tham gia nếu nó biết có rất nhiều hàng trên một trong hai bảng và không có chỉ mục.
LINQ có chọn thuật toán của nó để tham gia không? hay nó luôn luôn sử dụng nó?
+1 - thực hiện kế hoạch cai trị, và chỉ bằng cách biết về họ đặt bạn dễ dàng trong top 5% của các lập trình viên cơ sở dữ liệu. –
Tôi đánh giá cao lời khen, nhưng bạn nghiêm túc đánh giá cao kiến thức của tôi. – Meiscooldude