Estoy haciendo una consulta "select sum (foo) from bar" en una base de datos MySQL que resume los registros de 7.3mm y tarda unos 22 segundos por ejecución. ¿Hay algún truco para acelerar las sumas en MySQL?¿Es posible acelerar una suma() en MySQL?
Respuesta
No, no puede acelerar la función en sí. El problema aquí es que estás seleccionando 7.3 millones de registros. MySQL tiene que escanear toda la tabla, y 7.3 millones es un número bastante grande. Estoy impresionado de que termine tan rápido, en realidad.
Una estrategia que podría emplear sería dividir sus datos en subconjuntos más pequeños (quizás por fecha? Mes?) Y mantener una suma total de datos antiguos que no va a cambiar. Puede actualizar periódicamente la suma, y el valor total se puede calcular sumando la suma y cualquier dato nuevo que se haya agregado desde entonces, que será un número mucho más pequeño de filas.
No, realmente no. Siempre tendrá que enumerar todas las filas en la tabla.
¿Podría crear una tabla adicional y actualizar la suma allí en cada inserción, actualización, eliminación?
Si la consulta es realmente así de simple, sin ... pero si que está utilizando una consulta más compleja (y abreviado aquí) que podría (probablemente) - como usar mejor se une ...
Turn en QUERY CACHE en mysql. El almacenamiento en caché está DESACTIVADO por defecto. Necesita establecer el archivo mysql ini.
-- hint mysql server about caching
SELECT SQL_CACHE sum(foo) FROM bar;
MySQL optimizer puede devolver una caché si no se realizaron cambios en la tabla.
leer más aquí: http://www.mysqlperformanceblog.com/2006/07/27/mysql-query-cache/
¿Se actualizará el valor guardado en caché cuando un valor de 'foo' se actualiza? ¿O MySQL simplemente volverá a sumar toda la tabla la próxima vez que se ejecute esta consulta? –
@ BlueRaja-DannyPflughoeft el caché se borrará y volverá a sumar toda la tabla. –
probablemente puede intentar añadir un índice en el campo bar.foo. El índice contendrá todos los valores de la columna de la barra, pero es más pequeño y más rápido de escanear que la tabla foo original, especialmente si foo tiene muchas otras columnas.
error solucionado al referirse a la columna. debería ser bar.foo, no foo.bar. gracias a @ harry-b – hongliang
dos cosas aquí:
1) No debe hacer la suma de 7,3 millones de registros de manera regular - introducir tablas de fases que sirven las necesidades del negocio (por día, mes, año, departamento, etc.) y llenarlos de de forma programada, posiblemente reutilizar esas tablas en lugar de tabla original 'en bruto' (como seleccionar valor resumido para cada día cuando se necesita unos pocos días de intervalo, etc.)
2) comprobar su transacción settings
http://dev.mysql.com/doc/refman/5.0/en/set-transaction.html#isolevel_repeatable-read
- 1. ¿Es posible acelerar Python IO?
- 2. OpenCV suma de diferencias al cuadrado acelerar
- 3. ¿Es posible ejecutar una cadena en MySQL?
- 4. uso SUMA mysql() en una cláusula WHERE
- 5. ¿Es posible acelerar un escaneo recursivo de archivos en PHP?
- 6. MySQL Math - ¿Es posible calcular una correlación en una consulta?
- 7. Elementos de suma MySql de una columna
- 8. Cómo acelerar o priorizar una consulta en MySql
- 9. cómo hacerlo suma de suma en la consulta mysql salida
- 10. ¿Es posible acelerar la descarga de artefactos de maven?
- 11. ¿Es posible tener una vista indexada en MySQL?
- 12. ¿Es posible hacer una copia masiva en mysql
- 13. ¿Es posible insertar datos en una vista de MySQL?
- 14. Promedio de una suma en la consulta Mysql
- 15. suma MYSQL() para las filas distintas
- 16. ¿Es posible agrupar varias columnas mediante MySQL?
- 17. ¿Es posible acelerar las compilaciones crosstool-ng una vez que se han producido errores?
- 18. Cómo acelerar SELECT .. LIKE consultas en MySQL en varias columnas?
- 19. R: ¿Es posible paralelizar/acelerar la lectura de una CSV de más de 20 millones de filas en R?
- 20. ¿Es posible que mysql cree una base de datos distribuida?
- 21. MYSQL Resultados de suma de un cálculo
- 22. Convolviendo una imagen con OpenGL ES en iPhone: ¿es posible?
- 23. ¿Acelerar mis índices en MySQL - CRC o MD5?
- 24. Orden MYSQL por suma de columnas
- 25. ¿Es posible tener un índice basado en función en MySQL?
- 26. MySQL selecto grupo suma por fecha
- 27. ¿Cómo puedo acelerar una consulta MySQL con una compensación grande en la cláusula LIMIT?
- 28. Seleccionar Mysql suma conmutativa de cada fila
- 29. ¿Es posible usar la GPU para acelerar el hash en Python?
- 30. ¿Es posible seleccionar valores individuales usando SHOW STATUS en MySQL?
Es posible en otras bases de datos sin embargo; ex. [Oracle] (http://en.wikipedia.org/wiki/Materialized_view), [MS SQL] (http://technet.microsoft.com/library/Cc917715), –