Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

A adesão demora muito


Olhando para todos os campos envolvidos, um índice de cobertura em cada tabela envolveria muitas colunas
t1: Y, F, H, A
t2: X, G, C, D, E

Quão seletivos são QUALQUER um dos critérios:t2.X, t2.G ou t1.Y, t1.F, t1.H ?

Se nenhuma das colunas individuais for seletiva o suficiente (idealmente 0,5% ou menos), convém criar um ou vários índices de cobertura que envolvam várias colunas, por exemplo
t2 (G, X)
t1 (H, F, Y)

Observação: A ordem das colunas em um índice é muito importante - sempre coloque o mais seletivo (aquele que divide os dados da coluna nos conjuntos mais distintos) primeiro.

À custa do armazenamento, você pode fazer o índice COBRIR a consulta fornecendo todas as colunas necessárias no próprio índice. Isso significa que a consulta não precisa voltar aos dados da tabela.
create index ix_t2 on t2 (G,X) INCLUDE (C,D,E)
create index ix_t1 on t1 (H,F,Y) INCLUDE (A)

EDITAR


Parece que eu coloquei um SQL Server DDL lá. No Oracle, você teria que expandir o índice para se tornar t2 (G,X, C,D,E) - mas isso aumenta os requisitos de seletividade para o uso do índice, pois a chave do índice se torna muito longa.