2009-01-13 24 views

Respuesta

40

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

¿Estás preguntando, ¿sería acelerar una consulta como

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

si se ha añadido un índice en 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 excepción oscura (que se aplica tan rara vez que la mayoría de los optimizadores DB probablemente no se molestan en implementar este truco). Si la consulta pasa a ser

SELECT sum(foo) FROM bar 

, donde hay un índice en foo, y el bar es una tabla con muchas columnas, es posible leer en el índice completo, incurriendo en un éxito menor que si usted lee el tabla subyacente, y obtenga la respuesta directamente del índice, ¡sin tener que tocar la tabla "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.

+1

+1 porque es un uso interesante de los índices. – NotMe

+1

+1 Buen consejo: para ver el plan de ejecución producido por el optimizador. –

+0

¿Esto siempre es cierto, los índices no pueden afectar el rendimiento de SUM?¿Qué sucede si estamos usando un índice de filtro que indique que el valor NO ES NULO? Y cuando estamos usando la cláusula WHERE para SUMAR solo valores particulares, ¿ayudaría un índice? – gotqn

7

No. Los índices mejoran las búsquedas al limitar la cantidad de comprobaciones necesarias. 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.

+0

Pero si todas esas columnas están presentes en el índice, no es necesario acceder a la tabla actual, haciendo que la suma sea más rápida que con el caso sin índice –

4

Si desea hacer la suma más rápido, puede pre-materializar el resultado. En Oracle, use Materialized Views, en el uso de MS SQL Indexed Views.

En su pregunta específica "es la creación de un índice para una columna que se resume es más rápido que ningún í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.

0

Si el índice cubre, 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.

0

me encontré con la indexación de una columna en la que (ProductID aquí) ayuda al utilizar esta consulta:

idproducto SELECT, suma (cantidad) DE recibos DONDE ProductID = 1 GRUPO POR idproducto

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

+1

Con una sola ID de producto, ¿necesita la ID del producto en la lista SELECCIONAR? –

+1

sí, pero como dijo SquareCog, agregar un índice a productid ayuda porque está buscando filas basadas en productid. La pregunta, en su caso, es si agregar un índice de cantidad ayudaría – alex9311

Cuestiones relacionadas