Recientemente, aprendí la maravilla de los índices y el rendimiento ha mejorado drásticamente. 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 podría simplemente indexar todos los campos para hacer que la tabla sea increíblemente rápida? Estoy seguro de que hay una buena razón para no hacer esto, pero ¿qué tal tres campos en una tabla de treinta campos? ¿10 en un campo de 30? ¿Dónde se debe trazar la línea y por qué?
Respuestas:
Los índices ocupan espacio en la memoria (RAM); Demasiados o demasiado grandes índices y la base de datos tendrá que intercambiarlos hacia y desde el disco. También aumentan el tiempo de inserción y eliminación (cada índice debe actualizarse para cada dato insertado / eliminado / actualizado).
No tienes memoria infinita. Haciendo que todos los índices quepan en RAM = bueno.
No tienes tiempo infinito. Indexar solo las columnas que necesita indexar minimiza el impacto de rendimiento de inserción / eliminación / actualización.
fuente
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 rendimiento tendrá para las operaciones de escritura.
Además, cada índice ocupa más espacio en disco y espacio de memoria (cuando se llama), por lo que también podría ralentizar las operaciones de lectura (para tablas grandes). Mira esto
fuente
Tienes que equilibrar las necesidades de CRUD. Escribir en tablas se vuelve lento. En cuanto a dónde trazar la línea, eso depende de cómo se acceda a los datos (filtrado de clasificación, etc.).
fuente
La indexación ocupará más espacio asignado tanto de la unidad como de la memoria RAM, pero también mejorará mucho el rendimiento. Desafortunadamente, cuando alcanza el límite de memoria, el sistema cederá el espacio de la unidad y arriesgará el rendimiento. Prácticamente, no debe indexar ningún campo que pueda pensar que no está involucrado en ningún tipo de algoritmo de desplazamiento de datos, ni inserción ni búsqueda (cláusula WHERE). Pero deberías hacerlo si no. De forma predeterminada, debe indexar todos los campos. Los campos que debe considerar desindexar es si las consultas son utilizadas solo por el moderador, a menos que también necesiten velocidad.
fuente
esta respuesta se basa en mi opinión personal Estoy usando mi lógica matemática para responder
la segunda pregunta fue sobre el borde donde detenerse, primero hagamos un cálculo matemático, supongamos que tenemos N filas con L campos en una tabla si indexamos todos los campos obtendremos una L nuevas tablas de índice donde cada tabla se ordenará en un De manera significativa los datos del campo de índice, a primera vista, si su tabla tiene un peso W, se convertirá en W * 2 (1 tera se convertirá en 2 tera) si tiene una tabla grande de 100 (ya trabajé en el proyecto donde estaba el número de la tabla alrededor de 1800 mesa) desperdiciará 100 veces este espacio (100 tera), esto está lejos de ser prudente.
Si aplicaremos índices en todas las tablas, tendremos que pensar en las actualizaciones de índices, si una actualización desencadena la actualización de todos los índices, esta es una selección de todos los equivalentes desordenados en el tiempo.
de esto concluyo que tienes en este escenario que si pierdes este tiempo es preferible perderlo en una selección ni en una actualización porque si seleccionas un campo que no está indexado no dispararás otra selección en todos los campos que estén no indexado
que indexar?
claves externas: es una necesidad basada en
clave primaria: todavía no estoy seguro de que puede ser que alguien lea esto pueda ayudar en este caso
otros campos: la primera respuesta natural es la mitad de los campos restantes por qué: si debe indexar más, no está lejos de la mejor respuesta, si debe indexar menos, tampoco está lejos porque sabemos que ningún índice es malo y todo indexado también es malo.
A partir de estos 3 puntos, puedo concluir que si tenemos campos L compuestos por teclas K, el límite debería estar en algún lugar cercano
((L-K)/2)+K
más o menos en L / 10esta respuesta se basa en mi lógica y mis precios personales
fuente
No es una buena idea indexar todas las columnas de una tabla. Si bien esto hará que la tabla sea muy rápida de leer, también será mucho más lento escribir en ella. Escribir en una tabla que tiene todas las columnas indexadas implicaría poner el nuevo registro en esa tabla y luego poner la información de cada columna en su propia tabla de índice.
fuente