Solucionado (ver solución)
Solucionado
(ver solución)
2
respuestas

¿Cual es el lado malo de los indices?

Es increible que con agregar los indices, las consultas sean mucho mas rápidas. Pero siento que debe haber un lado malo.

Si vemos mi consulta: SELECT * FROM FACTURAS WHERE FECHA_VENTA = '20170101' GROUP BY DNI; Costo: 8849.05 Mientras que con un indice en FECHA_VENTA Costo: 60.89

Cuando el profesor, nos dijo que los indices si se aplican(cuando se hagan el UPDATE, INSERT) demoraran más, porque tambien deben actualizar los indices.

Entonces hice el siguiente comando:

EXPLAIN FORMAT=JSON INSERT INTO FACTURAS VALUES ('231232','00237','20170101','544499',0.14) \G;

Salio esto:

EXPLAIN: {
  "query_block": {
    "select_id": 1,
    "table": {
      "insert": true,
      "table_name": "FACTURAS",
      "access_type": "ALL"
    }
  }
}
1 row in set, 1 warning (0.0006 sec)
Note (code 1003): insert into `jugos_ventas`.`facturas` values ('231232','00237','20170101','544499',0.14)

Pero no indica el costo, tal vez el comando explain solo funciona para las consultas y no modificaciones.

Sin embargo, queda mi duda de si llego al caso extremo de que agrego un INDEX, para cada columna, algo se este sacrificando para mejorar el tiempo de las consultas. Espero se entienda. Saludos

2 respuestas
solución!

Hola Edsel, espero que estés bien.

Entiendo tu inquietud. Optimizar el rendimiento de las consultas en una base de datos es un proceso que implica tomar decisiones basadas en el equilibrio entre la velocidad de las consultas y el costo de mantener los índices actualizados. Aquí hay algunas consideraciones que podrían aclarar tus dudas:

Indices y Actualizaciones: Es cierto que los índices pueden ralentizar las operaciones de inserción, actualización y eliminación, ya que cada vez que se modifica una fila, los índices asociados también deben actualizarse. Por lo tanto, es un compromiso entre tener índices para acelerar las consultas de selección y el impacto en el rendimiento de las operaciones de modificación.

EXPLAIN para Operaciones de Modificación: El comando EXPLAIN se utiliza principalmente para analizar la optimización de consultas de selección, no para operaciones de modificación (como inserciones). Por lo tanto, no proporcionará detalles de costo para una operación de inserción en el mismo sentido que lo haría para una consulta.

Sobrecarga de Índices: Tener índices en todas las columnas puede aumentar la velocidad de las consultas de selección, pero también conlleva un costo. Cada índice consume espacio en disco y puede ralentizar las operaciones de modificación. Además, demasiados índices pueden llevar a la "sobrecarga de índices", donde el sistema pasa más tiempo actualizando los índices que realizando las operaciones reales.

Seleccionando los Índices Correctos: En lugar de agregar índices a todas las columnas, es importante identificar las columnas que más se utilizan en las cláusulas WHERE, JOIN y GROUP BY de tus consultas. Estas son las columnas que tienen más probabilidades de beneficiarse de los índices. Elegir los índices correctos puede proporcionar un buen equilibrio entre rendimiento y costo.

Monitorización y Ajuste: La optimización de la base de datos es un proceso continuo. Debes monitorear el rendimiento de tu base de datos a medida que se agregan índices y ajustar en función de los resultados. Algunas bases de datos también ofrecen herramientas de ajuste automático de índices que pueden ayudar a mantener un equilibrio adecuado.

En resumen, es importante encontrar un equilibrio entre la velocidad de las consultas y el impacto en las operaciones de modificación al decidir qué columnas indexar. No necesariamente es una solución de "agregar índices a todo", sino más bien identificar las consultas críticas y las columnas involucradas en esas consultas para indexarlas de manera efectiva.

¡Saludos!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios

Muchas gracias Ingrid