Pregunta

¿Crear un índice para una columna que se está sumando es más rápido que no tener índice?

¿Fue útil?

Solución

Lo siento, no está claro lo que está preguntando.

¿Está preguntando, aceleraría una consulta como

?
SELECT product, sum(quantity) FROM receipts 
GROUP BY product

si agregó un índice de cantidad?

Si esa es la pregunta, entonces la respuesta es no. En términos generales, los índices son útiles cuando necesita encontrar solo unas pocas filas entre muchas; aquí necesita todas las filas, por lo que un índice no ayuda.

Hay una oscura excepción (que se aplica tan raramente que la mayoría de los optimizadores de DB probablemente no se molesten en implementar este truco). Si su consulta resulta ser

SELECT sum(foo) FROM bar

, donde hay un índice en foo, y la barra es una tabla con muchas columnas, es posible leer en el índice completo, incurriendo en un golpe menor que si lees la tabla subyacente, y obtienes la respuesta directamente del índice: nunca tener que tocar el " real " mesa en absoluto! Sin embargo, este es un caso bastante raro, y querrá probar que su optimizador sabe hacer esto antes de confiar demasiado en esto.

Otros consejos

No. Los índices mejoran las búsquedas al limitar la cantidad de controles necesarios. Una función agregada (cuenta, máximo, mínimo, suma, promedio) tiene que ejecutarse a través de todas las entradas en una columna independientemente.

Si quiere hacer la suma más rápida, puede pre-materializar el resultado. En Oracle, use Vistas materializadas , en MS SQL use Vistas indizadas .

En su pregunta específica "¿Crear un índice para una columna que se está sumando es más rápido que ningún índice?", la respuesta es No.

La respuesta a su pregunta radica en la respuesta de Spencer:

" Una función agregada (count, max, min, sum, avg) tiene que ejecutarse a través de todas las entradas en las columnas que se suman independientemente. "

Acabo de aclarar el contexto de las columnas en la respuesta de Spencer. No obstante, su respuesta es correcta.

Si el índice está cubriendo, generalmente será más rápido. Cuánto más rápido se determinará por la diferencia entre el número de columnas en la tabla y el número en el índice. Además, podría ser más rápido si hay algún criterio de filtrado.

Encontré que indexar una columna en donde (productid aquí) ayuda al usar esta consulta:

SELECCIONE productid, suma (cantidad) DE los recibos DONDE productid = 1 GROUP BY productid

Una de mis consultas pasó de 45 segundos a casi instantánea una vez que agregué el índice.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top