Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Oracle lebih cepat memeriksa tumpang tindih

Saya tidak yakin apakah Anda ingin:

  1. periksa apakah baris yang akan Anda sisipkan tumpang tindih dengan beberapa baris yang ada, atau
  2. telusuri semua baris yang ada dan identifikasi baris yang tumpang tindih?

Jika (1), maka apa yang pada dasarnya sudah Anda lakukan...

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

...akan memberi Anda tumpang tindih dan harus sangat berkinerja, asalkan Anda memiliki indeks komposit yang komponennya berlawanan arah:{beginRange ASC, endRange DESC} .

Jika (2), maka Anda dapat menggunakan windowing seperti ini:

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

Ini akan memberi Anda setiap rentang yang tumpang tindih dengan rentang berikutnya (di mana arti "berikutnya" didefinisikan dalam konteks beginRange memesan).

Sebenarnya, ini bahkan tidak memerlukan indeks komposit (kecuali jika Anda ingin meliputi ) - hanya indeks sederhana di {beginRange} harus memastikan kinerja yang layak.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bekerja dengan acara di Oracle Cloud Infrastructure Bagian 1:dasar-dasar layanan

  2. Bagaimana saya bisa mendapatkan posisi kesalahan dalam kueri Oracle SQL?

  3. Menggunakan Oracle JDeveloper 12c dengan Oracle Database, Bagian 2

  4. mengganti tanda kurung siku dari string dengan fungsi Oracle REGEXP_REPLACE

  5. Kueri tabel dan nama kolom yang disimpan dalam tabel