valores una todos sumas sumar suma los filas columnas columna acumuladas acumulada mysql sql sql-server indexing sum

mysql - todos - Indice una columna suma



sumar todos los valores de una columna mysql php (5)

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

¿Estás preguntando si aceleraría una consulta como

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

si agregaste un índice sobre la 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.

Existe una excepción oscura (que se aplica de manera que rara vez la mayoría de los optimizadores DB probablemente no se molestan en implementar este truco). Si tu 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, incurrir en un menor impacto que si se lee la tabla subyacente, y obtener la respuesta directamente del índice - ¡nunca tener que tocar la mesa "real" en absoluto! Sin embargo, este es un caso bastante raro y querrá probar que su optimizador sabe que debe hacer esto antes de confiar demasiado en esto.

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


No. Los índices mejoran las búsquedas al limitar cuántos controles se requieren. Una función agregada (recuento, máximo, mínimo, suma, prom) tiene que ejecutarse a través de todas las entradas en una columna independientemente.


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

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

La respuesta a su pregunta se encuentra en la respuesta de Spencer:

"Una función de agregado (recuento, máximo, mínimo, suma, prom) tiene que ejecutarse a través de todas las entradas en una columna que se suman independientemente".

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


Si el índice está cubriendo, generalmente será más rápido. Cuanto más rápido será determinado por la diferencia entre el número de columnas en la tabla frente al número en el índice. Además, podría ser más rápido si hay algún criterio de filtrado.


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

SELECCIONE productid, sum (cantidad) FROM recibos WHERE productid = 1 GROUP BY productid

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