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

Присъединяването отнема твърде много време

Разглеждайки всички включени полета, покриващ индекс на всяка таблица би включвал може колони

t1: Y, F, H, A
t2: X, G, C, D, E

Колко селективни са НЯКОИ от критериите:t2.X, t2.G или t1.Y, t1.F, t1.H?

Ако никоя от отделните колони не е достатъчно селективна (в идеалния случай 0,5% или по-малко), може да искате да създадете един или няколко покриващи индекса, които включват множество колони, например

t2 (G, X)
t1 (H, F, Y)

Забележка: Редът на колоните в индекс е много важен - винаги поставяйте най-селективната (тази, която разделя данните на колоната на най-различни набори) на първо място.

За сметка на съхранението можете да накарате индекса да ПОКРИВА заявката, като предоставите всички необходими колони в самия индекс. Това означава, че заявката изобщо не трябва да се връща към данните от таблицата.

create index ix_t2 on t2 (G,X) INCLUDE (C,D,E)
create index ix_t1 on t1 (H,F,Y) INCLUDE (A)

РЕДАКТИРАНЕ

Изглежда, че съм поставил SQL Server DDL там. В Oracle ще трябва да разширите индекса, за да стане t2 (G,X, C,D,E) - но това увеличава изискванията за селективност за използване на индекса, тъй като ключът на индекса става много дълъг.




  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 от два oci клиента?

  2. Паралелен мениджър на Oracle

  3. Изявлението за актуализиране в съхранената процедура на oracle не работи

  4. Само едно активно за всяко ограничение на връзката

  5. Използване на последователност на Oracle за вмъкване на регистрационен номер в 2 таблици от jdbc?