Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Szybsze sprawdzanie nakładania się Oracle

Nie wiem, czy chcesz:

  1. sprawdź, czy wiersz, który zamierzasz wstawić, nakłada się na niektóre z istniejących lub
  2. przeszukać wszystkie istniejące wiersze i zidentyfikować te, które się nakładają?

Jeśli (1), to co właściwie już robisz...

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

... zapewni nakładanie się i powinien być bardzo skuteczny, pod warunkiem, że masz złożony indeks, którego składniki są przeciwne kierunki:{beginRange ASC, endRange DESC} .

Jeśli (2), możesz wykorzystać okienkowanie w ten sposób:

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

To da ci każdy zakres, który pokrywa się z jego następnym zakresem (gdzie znaczenie „następny” jest zdefiniowane w kontekście beginRange zamawianie).

Ściśle rzecz biorąc, nie wymaga to nawet złożonego indeksu (chyba że chcesz pokrycie ) - po prostu prosty indeks na {beginRange} powinien zapewnić przyzwoitą wydajność.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę połączyć się z internetową bazą danych Oracle za pomocą Java?

  2. Błąd :ORA-06553:PLS-306:błędna liczba lub typy argumentów w wywołaniu procedury

  3. wyrocznia - jakie oświadczenia należy popełnić?

  4. Dlaczego nie mogę tworzyć wyzwalaczy na obiektach należących do SYS?

  5. W Oracle AS alias nie działa