with length index example drop create constraint column mysql sql indexing

example - mysql index length



MySQL: ¿por qué no indexar todos los campos? (5)

Recientemente aprendí la maravilla de los índices y el rendimiento ha mejorado de forma espectacular. Sin embargo, con todo lo que he aprendido, parece que no puedo encontrar la respuesta a esta pregunta.

Los índices son geniales, pero ¿por qué alguien no podía simplemente indexar todos los campos para hacer que la tabla fuera increíblemente rápida? Estoy seguro de que hay una buena razón para no hacer esto, pero ¿qué hay de tres campos en una mesa de treinta campos? 10 en un campo de 30? ¿Dónde debería uno trazar la línea, y por qué?


Los índices ocupan espacio en la memoria (RAM); Demasiados o demasiado grandes índices y el DB va a tener que estar intercambiándolos desde y hacia el disco. También aumentan el tiempo de inserción y eliminación (cada índice debe actualizarse para cada dato insertado / eliminado / actualizado).

Usted no tiene memoria infinita. Haciéndolo para que todos los índices quepan en RAM = bueno.

No tienes tiempo infinito. Indexar solo las columnas que necesita indexar minimiza el impacto de inserción / eliminación / actualización de rendimiento.


No es una buena idea indexar todas las columnas en una tabla. Si bien esto hará que la tabla sea muy rápida para leer, también se vuelve mucho más lenta para escribir. Escribir en una tabla que tiene indexada cada columna implicaría colocar el nuevo registro en esa tabla y luego colocar la información de cada columna en su propia tabla de índice.


Tenga en cuenta que cada índice debe actualizarse cada vez que se actualiza, inserta o elimina una fila. Por lo tanto, cuantos más índices tenga, menor será el rendimiento que tendrá para las operaciones de escritura.

Además, cada índice ocupa más espacio en disco y espacio en la memoria (cuando se llama), por lo que también podría ralentizar las operaciones de lectura (para tablas grandes). Mira esto


Tienes que equilibrar las necesidades de CRUD. Escribir en tablas se vuelve lento. En cuanto a dónde dibujar la línea, eso depende de cómo se estén procesando los datos (clasificación del filtrado, etc.).


La indexación ocupará más espacio asignado tanto del disco duro como del ram, pero también mejorará mucho el rendimiento. Lamentablemente, cuando alcanza el límite de memoria, el sistema cederá el espacio del disco y pondrá en riesgo el rendimiento. Prácticamente, no debe indexar ningún campo que pueda pensar que no involucra ningún tipo de algoritmo de cruce de datos, ni insertar ni buscar (cláusula WHERE). Pero deberías, si no es así. Por defecto, debes indexar todos los campos. Los campos que debe considerar desagregar es si las consultas solo las usa el moderador, a menos que también necesiten velocidad.