› Fóruns › SQL e PL/SQL › Usar Substr ou Like › Usar Substr ou Like
Oi ELobao,
Não necessariamente o uso de um índice em uma consulta vai acarretar em uma performance melhor. Principalmente no seu caso, em que o número de registros retornados é bem maior do que 10% do total de registros da tabela. Isto se deve ao fato de que quando se utiliza um índice, o mesmo bloco de dados pode ser lido várias vezes, a cada busca por um registro diferente no bloco, gerando muita I/O de disco, enquanto que em um full table scan o bloco seria lido somente uma vez para todos os registros contidos nele.
É provável ainda que o Oracle não esteja utilizando o índice em nenhuma das duas ocasiões. Um índice existir em uma coluna não significa que ele vai ser utilizado, pra saber mais você precisaria analisar o explain plan das suas consultas.
Pra entender melhor, explicando bem grosseiramente, imagine que a sua consulta com like utilize o índice, então vai ocorrer que pra cada registro retirado, o Oracle consulta o índice, pega o endereço de memória do registro e faz a leitura do bloco onde o registro se encontra. Isto seria feito 800 mil vezes, uma pra cada registro retirado, ou seja, 800 mil leituras de blocos. Agora, imagine que um bloco contém 10 registros e você vai fazer um full table scan com substr, com o total de 5 milhões de registros, a tabela teria, hipotéticamente, 500 mil blocos, sendo que cada bloco seria lido somente uma vez. Isto dá uma diferença de 300 mil leituras de blocos lidos entre um index scan e um full table scan. Com isso você já pode tirar uma conclusão de que o uso de índice nem sempre vale a pena…
8)