BETWEEN deveria superam IN neste caso (mas faça medir e verificar os planos de execução também!), especialmente como n cresce e como as estatísticas ainda são precisas. Vamos assumir:mé o tamanho da sua tabelané o tamanho do seu intervalo
O índice pode ser usado (n é minúsculo comparado a m )
-
Em teoria,BETWEENpode ser implementado com um único "range scan" (Oracle speak) no índice de chave primária e, em seguida, percorrer no máximonnós folha de índice. A complexidade seráO(n + log m)
-
INgeralmente é implementado como uma série (loop) den"varreduras de intervalo" no índice de chave primária. Commsendo o tamanho da tabela, a complexidade será sempreO(n * log m)... o que é sempre pior (desprezível para tabelas muito pequenasmou intervalos muito pequenosn)
O índice não pode ser usado (n é uma parte significativa de m )
De qualquer forma, você obterá uma verificação completa da tabela e avaliará o predicado em cada linha:
-
BETWEENprecisa avaliar dois predicados:um para o limite inferior e outro para o limite superior. A complexidade éO(m)
-
INprecisa avaliar no máximonpredicados. A complexidade éO(m * n)... o que é sempre pior, ou talvezO(m)se o banco de dados pode otimizar oINlist para ser um mapa de hash, em vez de uma lista de predicados.