Pergunta

Disseram-me e li em todos os lugares (mas ninguém se atreveu a explicar o porquê) que ao compor um índice em múltiplas colunas eu deveria colocar a coluna mais seletiva primeiro, por razões de desempenho.Por que é que?É um mito?

Foi útil?

Solução

Eu deveria colocar a coluna mais seletiva primeiro

De acordo com Tom, a seletividade de coluna não tem impacto no desempenho para consultas que usam todas as colunas do índice (ela afeta a capacidade do Oracle de compactar o índice).

não é a primeira coisa, não é a coisa mais importante.claro, é algo a considerar, mas está relativamente longe no grande esquema das coisas.

Em certos casos estranhos, muito peculiares e anormais (como o acima, com dados totalmente distorcidos), a seletividade pode facilmente importar. NO ENTANTO, eles são

a) bastante raro b) realmente dependente dos valores usados ​​em tempo de execução, como todas as consultas distorcidas são

então, em geral, olhe as dúvidas que você tem, tente minimizar os índices que você precisa com base nisso.

O número de valores distintos em uma coluna em um índice concatenado não é relevante ao considerar a posição no índice.

No entanto, essas considerações devem vir em segundo lugar ao decidir sobre a ordem das colunas do índice.O mais importante é garantir que o índice possa ser útil para muitas consultas, de modo que a ordem das colunas reflita o uso dessas colunas (ou a falta delas) nas cláusulas where de suas consultas (pelo motivo ilustrado por AndreKR).

COMO VOCÊ USA o índice - isso é o que é relevante na hora de decidir.

Todas as outras coisas sendo iguais, eu ainda colocaria a coluna mais seletiva em primeiro lugar.Parece certo...

Atualizar: Outra citação de Tom (obrigado a Milão por encontrá-lo).

No Oracle 5 (sim, versão 5!), Houve um argumento para colocar as colunas mais seletivas em primeiro lugar em um índice.

Desde então, não é verdade que colocar as entradas mais discriminador em primeiro lugar no índice tornará o índice menor ou mais eficiente.Parece que vai, mas não vai.

Com a compactação da chave do índice, há um argumento convincente a seguir para o outro lado, pois pode diminuir o índice.No entanto, isso deve ser determinado pela forma como você usa o índice, conforme declarado anteriormente.

Outras dicas

Você pode omitir colunas da direita para a esquerda ao usar um índice, ou seja, quando você tiver um índice em col_a, col_b você pode usá -lo em WHERE col_a = x Mas você não pode usá -lo em WHERE col_b = x.

Imagine ter uma lista telefônica que seja classificada pelos primeiros nomes e depois pelos sobrenomes.

Pelo menos na Europa e nos primeiros nomes dos EUA, têm uma seletividade muito menor do que os sobrenomes, portanto, procurar o primeiro nome não restringiria muito o conjunto de resultados; portanto, ainda haveria muitas páginas para verificar o sobrenome correto.

A ordem das colunas no índice deve ser determinada por suas consultas e não ser nenhuma consideração de seletividade. Se você tiver um índice em (a, b, c), e a maioria das suas consultas de coluna única é contra a coluna C, seguida por A, depois as coloque na ordem de C, A, B na definição de índice para a melhor eficiência . O Oracle prefere usar a borda principal do índice para a consulta, mas pode usar outras colunas no índice em um caminho de acesso menos eficiente conhecido como Skip-Scan.

O mais seletivo é o seu índice, o mais rápido é a pesquisa.

Simplesmente imagine uma agenda telefônica: você pode encontrar alguém principalmente rápido pelo último nome. Mas se você tiver muitas pessoas com o mesmo nome mais longo, durará mais tempo em procurar a pessoa, olhando para o primeiro nome.

Portanto, você deve fornecer as colunas mais seletivas primeiro para evitar o máximo possível esse problema.

Além disso, você deve garantir que suas consultas estejam usando corretamente esses "critérios de seletividade".

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top