Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Khi nào tôi nên sử dụng ĐĂNG KÝ CHÉO qua THAM GIA INNER?

Có ai có thể cho tôi một ví dụ điển hình về thời điểm ÁP DỤNG CROSS tạo ra sự khác biệt trong những trường hợp INNER JOIN cũng hoạt động không?

Xem bài viết trong blog của tôi để so sánh hiệu suất chi tiết:

  • INNER JOIN so với CROSS APPLY

CROSS APPLY hoạt động tốt hơn trên những thứ không đơn giản JOIN điều kiện.

Cái này chọn 3 bản ghi cuối cùng từ t2 cho mỗi bản ghi từ t1 :

SELECT  t1.*, t2o.*
FROM    t1
CROSS APPLY
        (
        SELECT  TOP 3 *
        FROM    t2
        WHERE   t2.t1_id = t1.id
        ORDER BY
                t2.rank DESC
        ) t2o

Nó không thể được xây dựng dễ dàng với INNER JOIN điều kiện.

Bạn có thể làm điều gì đó tương tự bằng cách sử dụng CTE của và chức năng cửa sổ:

WITH    t2o AS
        (
        SELECT  t2.*, ROW_NUMBER() OVER (PARTITION BY t1_id ORDER BY rank) AS rn
        FROM    t2
        )
SELECT  t1.*, t2o.*
FROM    t1
INNER JOIN
        t2o
ON      t2o.t1_id = t1.id
        AND t2o.rn <= 3

, nhưng điều này khó đọc hơn và có lẽ kém hiệu quả hơn.

Cập nhật:

Vừa được kiểm tra.

master là một bảng khoảng 20,000,000 bản ghi bằng PRIMARY KEY trên id .

Truy vấn này:

WITH    q AS
        (
        SELECT  *, ROW_NUMBER() OVER (ORDER BY id) AS rn
        FROM    master
        ),
        t AS 
        (
        SELECT  1 AS id
        UNION ALL
        SELECT  2
        )
SELECT  *
FROM    t
JOIN    q
ON      q.rn <= t.id

chạy gần 30 giây, trong khi cái này:

WITH    t AS 
        (
        SELECT  1 AS id
        UNION ALL
        SELECT  2
        )
SELECT  *
FROM    t
CROSS APPLY
        (
        SELECT  TOP (t.id) m.*
        FROM    master m
        ORDER BY
                id
        ) q

là tức thì.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách thiết lập Thư cơ sở dữ liệu trong SQL Server (SSMS)

  2. Truyền mảng tới một thủ tục được lưu trữ trên máy chủ SQL

  3. Làm thế nào để gọi Thủ tục đã lưu trong Chế độ xem?

  4. SQL:Chọn 3 bản ghi hàng đầu + Tổng số lượng

  5. Lỗi kết nối RODBC odbcDriverConnect ()