Cita: si hay 300.000 registros y yo solo saco 6 de poca longitud... en que punto esta práctica se volvría muy lenta como para recurrir a index?
En el punto en que la
selectividad de las claves de ese índice se vuelva demasiado baja...
Eso se debe establecer
en el caso específico usando la información estadística que provee el DBMS. Hay fórmulas matemáticas que te permiten saber si una consulta determinada es o no óptima para un caso, pero no se extiende a todas las consultas, ni se hace de la forma simple en que lo estás planteando.
Esta sería la primera página de un apunte sobre costo de consultas:
Cita: OPTIMIZACION DE CONSULTAS SIMPLES – COSTOS
DATOS ESTADÍSTICOS
Tr = cantidad de tuplas de la relación
Br = cantidad de bloques que ocupa R
V(A,r) = cantidad de valores distintos del atributo A en la relación R.
Lr = Longitud de una tupla
SUPUESTO : R tiene una distribución UNIFORME.
Select *
From R
Where A θ "a"
Donde θ es { = , < , > , >= , <=, <>}
Costos de lectura: (CL)
a) Si Existe Indice agrupado (cluster) en A = "a" entonces CL = Br / V(A,r)
b) Si existe Indice no agrupado (no cluster) en A = "a" entonces CL = Tr / V(A,r)
c) Si Existe Indice agrupado (cluster) en A ψ "a" entonces CL = Br / 2
donde ψ es { < , > , <= , >= }
d) Si existe Indice no agrupado (no cluster) en A ψ "a" entonces CL = Tr / 2
donde ψ es { < , > , <= , >= }
e) Si no existe ningún índice entonces CL = Br
A) ESTIMACIÓN DEL TAMAÑO DEL OUTPUT
PRODUCTO CARTESIANO (JOIN)
R X S = Tr . Ts
JUNTA NATURAL (INNER JOIN)
R |X| S
Si R ∩ S = ∅ entonces Tr . Ts
Si R ∩ S = { clave de R } entonces <= Ts
Si R ∩ S = { clave de S } entonces <= Tr
Si R ∩ S = { atributo no clave } entonces Tr . Ts / V(A, r ) ó Tr .Ts / V(A,s)
Sobre esta base hay al menos seis pasos para establecer el costo optimo de la consulta...
Eso si quieres hacerlo con todos los detalles, claro, sino, siempre te queda la prueba/error.