Pregunta

Considere una tabla MySQL indexada con 7 columnas, en la que se consulta y se escribe constantemente.¿Cuál es el número aconsejable de filas que se debe permitir que contenga esta tabla antes de mejorar el rendimiento al dividir los datos en otras tablas?

¿Fue útil?

Solución

El hecho de obtener o no una ganancia de rendimiento al dividir los datos depende de los datos y de las consultas que ejecutará sobre ellos.Puede almacenar muchos millones de filas en una tabla y, con buenos índices y consultas bien diseñadas, seguirá siendo súper rápido.Considere la partición solo si ya está seguro de que sus índices y consultas son lo mejor posible, ya que puede ser más problemático que valioso.

Otros consejos

No existe un número mágico, pero hay algunas cosas que afectan el rendimiento en particular:

  • Cardinalidad del índice:no se moleste en indexar una fila que tenga 2 o 3 valores (como un ENUM).En una tabla grande, el optimizador de consultas los ignorará.
  • Existe una compensación entre escrituras e índices.Cuantos más índices tenga, más tardarán las escrituras.No se limite a indexar cada columna.Analice sus consultas y vea qué columnas deben indexarse ​​para su aplicación.
  • El disco IO y la memoria juegan un papel importante.Si puede colocar toda su tabla en la memoria, elimina la E/S del disco de la ecuación (de todos modos, una vez que la tabla está almacenada en caché).Supongo que verá un gran cambio en el rendimiento cuando su tabla sea demasiado grande para almacenarla en la memoria intermedia.
  • Considere particionar sus servidores según el uso.Si su sistema transaccional lee/escribe filas individuales, probablemente pueda ganar algo de tiempo replicando los datos en un servidor de solo lectura para generar informes agregados.

Como probablemente sepa, el rendimiento de la tabla cambia según el tamaño de los datos.Esté atento a su mesa/consultas.Sabrás cuándo es el momento de un cambio.

MySQL 5 tiene fraccionamiento incorporado y es muy bonito.Lo bueno es que puedes definir cómo se debe dividir tu tabla.Por ejemplo, si realiza consultas basándose principalmente en un ID de usuario, puede particionar sus tablas según el ID de usuario, o si realiza la consulta por fechas, hágalo por fecha.Lo bueno de esto es que MySQL sabrá exactamente en qué tabla de particiones buscar para encontrar sus valores.La desventaja es que si busca en un campo que no define su partición, escaneará cada tabla, lo que posiblemente podría disminuir el rendimiento.

Si bien después del hecho se podría señalar el tamaño de la tabla en el que el rendimiento se convirtió en un problema, no creo que se pueda predecirlo, ¡y ciertamente no a partir de la información proporcionada en un sitio web como este!

Algunas preguntas que podrías hacerte útilmente:

  • ¿Es actualmente aceptable el rendimiento?
  • ¿Cómo se mide el rendimiento? ¿Hay una métrica?
  • ¿Cómo reconocemos un rendimiento inaceptable?
  • ¿Medimos el rendimiento de alguna manera que nos permita pronosticar un problema?
  • ¿Todas nuestras consultas están utilizando un índice eficiente?
  • ¿Hemos simulado cargas y volúmenes extremos en el sistema?

Al utilizar el motor MyISAM, se encontrará con un límite estricto de 2 GB en el tamaño de la tabla a menos que cambie el valor predeterminado.

Nunca apliques una optimización si no crees que sea necesaria.Idealmente, esto debería determinarse mediante pruebas (como han aludido otros).

La partición horizontal o vertical puede mejorar el rendimiento pero también complicar su aplicación.No lo hagas a menos que estés seguro de que lo necesitas Y definitivamente te ayudará.

El tamaño del archivo MyISAM de datos 2G es solo predeterminado y se puede cambiar en el momento de la creación de la tabla (o más tarde mediante un ALTER, pero es necesario reconstruir la tabla).No se aplica a otros motores (p. ej.Inno DB).

En realidad, esta es una buena pregunta sobre el rendimiento.Has leído pipas de jay?No hay un número específico de filas, pero sí un tamaño de página específico para las lecturas y puede haber buenas razones para la partición vertical.

Mira su presentación de kung fu y echa un vistazo a sus publicaciones.Estoy seguro de que encontrará que ha escrito algunos consejos útiles sobre esto.

¿Estás usando MyISAM?¿Planea almacenar más de un par de gigabytes?Tenga cuidado con MAX_ROWS y AVG_ROW_LENGTH.

Jeremy Zawodny tiene un excelente redacción sobre cómo solucionar este problema.

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