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

Kiểm tra chồng chéo nhanh hơn Oracle

Tôi không chắc liệu bạn có muốn:

  1. kiểm tra xem hàng bạn sắp chèn có trùng lặp với một số hàng hiện có hay không, hoặc
  2. tìm kiếm qua tất cả các hàng hiện có và xác định những hàng trùng lặp?

Nếu (1), thì về cơ bản những gì bạn đang làm ...

SELECT *
FROM YOUR_TABLE
WHERE :inputEnd > beginRange AND :inputStart < endRange;

... sẽ cung cấp cho bạn các phần chồng chéo và phải rất hiệu quả, miễn là bạn có một chỉ mục tổng hợp có các thành phần đối lập với nhau chỉ đường:{beginRange ASC, endRange DESC} .

Nếu (2), thì bạn có thể sử dụng cửa sổ như thế này:

SELECT *
FROM (
    SELECT
        YOUR_TABLE.*,
        LEAD(beginRange) OVER (ORDER BY beginRange) nextBeginRange
    FROM YOUR_TABLE
)
WHERE endRange > nextBeginRange;

Điều này sẽ cung cấp cho bạn mọi phạm vi trùng với phạm vi tiếp theo của nó (trong đó ý nghĩa của "tiếp theo" được xác định trong ngữ cảnh của beginRange đặt hàng).

Nghiêm túc mà nói, điều này thậm chí không cần chỉ mục tổng hợp (trừ khi bạn muốn cover ) - chỉ là một chỉ mục đơn giản trên {beginRange} sẽ đảm bảo hiệu suất tốt.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle, thêm các số 0 ở đầu vào chuỗi (không phải số)

  2. DotConnect của DevArt dành cho nhà cung cấp dữ liệu ADO.NET của Oracle và DataDirect

  3. Sao chép bảng từ một Oracle DB sang một DBLink đơn hướng khác

  4. Oracle Apex 5 - Thanh chân trang giống như thanh trong Trình tạo ứng dụng

  5. Truy vấn con trong câu lệnh select hoạt động như thế nào trong oracle