Tengo una tabla MySQL InnoDB con 1,000,000 de registros. ¿Es esto demasiado? ¿O las bases de datos pueden manejar esto y más? Pregunto porque noté que algunas consultas (por ejemplo, obtener la última fila de una tabla) son más lentas (segundos) en la tabla con 1 millón de filas que en una con 100.
sql
mysql
database
performance
Juanjo Conti
fuente
fuente
Tengo una base de datos con más de 97.000.000 de registros ( archivo de datos de 30GB ) y no tengo ningún problema.
Solo recuerde definir y mejorar el índice de su tabla .
¡Entonces es obvio que 1,000,000 no son MUCHOS! (Pero si no indexa; sí, son MUCHOS)
fuente
Utilice 'explicar' para examinar su consulta y ver si hay algún problema con el plan de consulta.
fuente
EXPLAIN
, sean novatos o no.EXPLAIN
;)Creo que este es un error común: el tamaño es solo una parte de la ecuación cuando se trata de la escalabilidad de la base de datos. Hay otros problemas que son difíciles (o más difíciles):
Qué tan grande es el conjunto de trabajo (es decir, cuántos datos deben cargarse en la memoria y trabajar activamente). Si simplemente inserta datos y luego no hace nada con ellos, en realidad es un problema fácil de resolver.
¿Qué nivel de concurrencia se requiere? ¿Hay un solo usuario insertando / leyendo, o tenemos muchos miles de clientes operando a la vez?
¿Qué niveles de promesa / durabilidad y consistencia de desempeño se requieren? ¿Tenemos que asegurarnos de poder cumplir con cada compromiso? ¿Está bien si la transacción promedio es rápida, o queremos asegurarnos de que todas las transacciones sean confiablemente rápidas (control de calidad de seis sigma como - http://www.mysqlperformanceblog.com/2010/06/07/performance-optimization- y-seis-sigma / ).
¿Necesita hacer algún problema operativo, como ALTERAR el esquema de la tabla? En InnoDB esto es posible, pero increíblemente lento, ya que a menudo tiene que crear una tabla temporal en primer plano (bloqueando todas las conexiones).
Así que voy a decir que las dos cuestiones limitantes serán:
fuente
Si se refiere a 1 millón de filas, depende de cómo se realice la indexación y de la configuración de su hardware. Un millón de filas no es una gran cantidad para una base de datos empresarial, o incluso una base de datos de desarrollo en un equipo decente.
si te refieres a 1 millón de columnas (no estoy seguro de que eso sea posible en MySQL) entonces sí, esto parece un poco grande y probablemente causará problemas.
fuente
¿Registrarse? ¿Te refieres a grabar?
Un millón de registros no es un gran problema para una base de datos en estos días. Si tiene algún problema, es probable que no sea el sistema de base de datos en sí, sino el hardware en el que lo está ejecutando. Lo más probable es que no tenga ningún problema con la base de datos antes de que se quede sin hardware para solucionarlo.
Ahora, obviamente, algunas consultas son más lentas que otras, pero si dos consultas muy similares se ejecutan en tiempos muy diferentes, debe averiguar cuál es el plan de ejecución de la base de datos y optimizarlo, es decir, usar índices correctos, normalización adecuada, etc.
Por cierto, no existe un "último" registro en una tabla, desde un punto de vista lógico, no tienen un orden inherente.
fuente
SELECT LAST_INSERT_ID()
lugar de esa consulta.He visto tablas no particionadas con varios miles de millones de registros (indexados), que se unen automáticamente para el trabajo analítico. Eventualmente dividimos la cosa pero honestamente no vimos mucha diferencia.
Dicho esto, eso fue en Oracle y no he probado ese volumen de datos en MySQL. Los índices son tus amigos :)
fuente
Suponiendo que quiere decir "registros" por "registros", no, no es demasiado, MySQL se escala muy bien y puede contener tantos registros como tenga espacio en su disco duro.
Obviamente, aunque las consultas de búsqueda serán más lentas. Realmente no hay forma de evitar eso, excepto asegurarse de que los campos estén indexados correctamente.
fuente
Cuanto más grande se vuelve la tabla (como en más filas), las consultas más lentas se ejecutarán normalmente si no hay índices. Una vez que agregue los índices correctos, el rendimiento de su consulta debería mejorar o al menos no degradarse tanto a medida que crece la tabla. Sin embargo, si la consulta en sí devuelve más filas a medida que la tabla se hace más grande, comenzará a ver degradación nuevamente.
Si bien 1 millón de filas no son tantas, también depende de la cantidad de memoria que tenga en el servidor de base de datos. Si la tabla es demasiado grande para que el servidor la almacene en la memoria caché, las consultas serán más lentas.
fuente
El uso de la consulta proporcionada será excepcionalmente lento debido al uso de un método de combinación de ordenación para ordenar los datos.
Recomendaría repensar el diseño para que esté utilizando índices para recuperarlo o asegurarse de que ya esté ordenado de esa manera para que no sea necesario ordenarlo.
fuente