Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да направите пресичане на композиционна таблица

По отношение на производителността вашата заявка изглежда добре. Измерихте ли го, за да видите дали наистина има проблем?

Ако (object1_id, object2_id) е уникален, тогава можете да напишете заявката по-сбито, както следва:

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

Имайте предвид, че 6 е броят на предоставените идентификатори. Това трябва да се промени, ако е предоставен различен брой идентификатори. Ще трябва да измерите действителната производителност на вашия dadta, за да видите дали това води до някакво увеличение на скоростта.

Ако не можете да приемете уникалност, тогава това трябва да работи:

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

Най-важното обаче е да се уверите, че имате подходящи индекси на вашата маса! Това е далеч по-важно от това дали пишете една или друга заявка.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вмъкване в две оракулни таблици с последователност

  2. Как да получите стойността dbms.output, върната от PL-SQL блок в C#

  3. java.lang.ClassCastException:oracle.sql.BLOB не може да бъде прехвърлен към oracle.sql.BLOB

  4. EF6 Oracle TimeStamp &Date

  5. Как най-добре да се изчислят агрегирани данни на n-ниво въз основа на (n-1) данни на ниво (Oracle)