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

Jak zrobić przecięcie na stole składu

Pod względem wydajności Twoje zapytanie wygląda OK. Czy zmierzyłeś go, aby sprawdzić, czy naprawdę jest problem?

Jeśli (object1_id, object2_id) jest unikalny, możesz napisać zapytanie bardziej zwięźle w następujący sposób:

SELECT object1_id
FROM composition
WHERE object2_id IN (id1, id2, ..., id6)
GROUP BY object1_id
HAVING COUNT(*) = 6

Zauważ, że 6 to liczba dostarczonych identyfikatorów. Należy to zmienić, jeśli podana zostanie inna liczba identyfikatorów. Musiałbyś zmierzyć rzeczywistą wydajność na swoim dadta, aby zobaczyć, czy to daje jakikolwiek wzrost prędkości.

Jeśli nie możesz założyć wyjątkowości, to powinno działać:

SELECT object1_id
FROM composition
WHERE object2_id IN (id1, id2, ..., id6)
GROUP BY object1_id
HAVING COUNT(DISTINCT object2_id) = 6

Najważniejszą rzeczą jest jednak upewnienie się, że masz odpowiednie indeksy na twoim stole! To jest daleko ważniejsze niż to, czy piszesz jedno czy drugie zapytanie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Próba stworzenia listy wartości zawierającej wartość z tabeli i liczby pod nią

  2. wykonać obliczenia na danych w formie tabeli

  3. Jak zawrzeć więcej niż jedną partycję w pojedynczej instrukcji select w oracle?

  4. PL/SQL — Jak używać tablicy w klauzuli IN

  5. Jak przekazać nowe PK do przechowywanego proc w Oracle Apex?