2010-02-03 11 views
24

Estoy creando una nueva base de datos y me preguntaba si había alguna desventaja al agregar numerosos índices a las tablas que creo que pueden requerir una.¿Hay algún inconveniente en agregar numerosos índices a las tablas?

Si creo un índice pero termino sin utilizarlo, ¿habrá algún problema?

+4

duplicado: http://stackoverflow.com/questions/141232/how-many-database-indexes-is-too-many, http://stackoverflow.com/questions/418744/what -is-the-cost-of-indexing-multiple-db-columns y muchos otros. –

+0

Nunca he visto una pregunta con tantas respuestas duplicadas en menos de un minuto. –

+0

Creo que esto es más probable que ocurra a medida que SO se vuelve más y más popular, especialmente en las preguntas fáciles/genéricas como esta. –

Respuesta

27

Los índices hacen que sea más rápido buscar tablas, pero más tiempo para escribir. Tener índices no utilizados terminará provocando una ralentización innecesaria.

+2

Y los índices también ocupan espacio en disco. –

16

cada índice:

  • lleva algún lugar, en el disco y en la memoria RAM
  • necesita algún tiempo para actualizar, cada vez que inserte/actualizar/eliminar una fila

Lo que significa solo debe definir índices que sean útiles para las necesidades de su aplicación: demasiados índices ralentizarán las escrituras más de lo que obtendrá de las lecturas.

1

Tener un índice significa que los INSERTOS y las ACTUALIZACIONES tardan un poco más. Si tiene demasiados índices, entonces el beneficio de los tiempos de búsqueda más rápidos puede ser que no valga la pena el tiempo adicional de INSERTAR y ACTUALIZAR.

5

Sí. Solo debe agregar esos índices, que son necesarios.

Un índice requiere espacio adicional y, al insertar/actualizar/eliminar registros, el DBMS necesita actualizar también esos índices. Entonces, esto significa que lleva más tiempo actualizar/agregar/eliminar un registro, ya que el DBMS tiene que hacer una administración adicional.

añadiendo numerosos índices a las tablas que Creo que pueden necesitar uno.

Solo debe agregar aquellos índices para los que está seguro de que son necesarios. Para determinar las columnas donde se podía poner índices en, usted podría:

  • añadir índices para las columnas que son claves externas
  • añadir índices de columnas que se utilizan a menudo en las cláusulas WHERE
  • añadir índices a columnas que se usan en orden por cláusulas.

Otro enfoque -y quizá mejor-, es utilizar el Analizador de SQL:

  • uso de SQL para rastrear su aplicación/base de datos por un tiempo
  • guardar la traza se traduce uso
  • el rastreo da como resultado el Asistente de ajuste de índice, que le indicará qué índices debe crear, qué columnas deben estar en cada índice y también le indicará el orden de esas columnas para el índice.
1

Sí; tener un índice hace que las selecciones sean más rápidas, pero potencialmente hace que las inserciones sean más lentas, ya que los índices deben actualizarse para cada inserción. Si su aplicación escribe mucho y no lee mucho (por ejemplo, un registro de auditoría), debe evitar una indexación adicional.

4

Los índices causan un aumento en el tamaño de la base de datos y la cantidad de tiempo para insertar/actualizar/eliminar registros. Trate de no agregarlos a menos que sepa que los usará.

1
  • actualización y el costo de inserción más que necesitan ser actualizados, así índices
  • más espacio utilizado
1

No cree índices adicionales en el comienzo. Espere hasta que haya desarrollado al menos parcialmente el sistema para que pueda tener una idea sobre el uso de la tabla. Genere planes de consulta para ver qué se consulta (y cómo y los costos de rendimiento) y ENTONCES agregue nuevos índices según sea necesario.

1

¡No indexe ciegamente! Eche un vistazo a sus datos para ver qué columnas se están usando realmente en los predicados SELECT e indexe esos.

También considere que los índices toman lugar. A veces mucho espacio. He visto bases de datos donde los datos de indexación pesan mucho más que los datos brutos en volumen total.

1

espacio extra, tiempo extra para insertar como todo el mundo ha dicho.

Además, debe estar seguro de sus índices y su diseño porque a veces los índices pueden ralentizar las consultas si el optimizador de consultas elige el índice incorrecto. Esto no es común, pero puede ocurrir si se optimiza un índice para una unión en particular y se hace que otra unión se vuelva más lenta. No sé sobre SQL Server, pero encontrará muchos trucos para insinuar el optimizador mySQL para generar consultas de maneras específicas para evitar esto.

Los DBA se pagan mucho dinero para saber acerca de los gotcha extraños como este con índices (entre otras cosas) así que sí, hay aspectos negativos para agregar muchos índices, así que tenga cuidado. Apóyese en su generador de perfiles de consultas y no solo arroje índices ciegamente a los problemas.

1

Eche un vistazo a las columnas utilizadas en sus cláusulas where, mire las columnas utilizadas en las uniones, si las hubiera. Generalmente es la regla empírica más simple. Los índices extraños como se señaló anteriormente ralentizarán sus declaraciones DML y generalmente no se recomiendan. Idealmente, lo que he hecho es terminar todo el módulo y durante la fase de prueba de la unidad, asegúrese de que pueda cargar el análisis en el módulo y luego verifique si está viendo desaceleraciones y luego de analizar dónde están las bajas, agregue índices .

1

Creo que ya se ha respondido, pero básicamente los índices ralentizan las inserciones/actualizaciones a medida que el índice se actualiza cuando se inserta un nuevo registro (o uno existente).

El espacio también es una consideración, tanto en la memoria como en el disco. Así que para bases de datos donde se producen grandes cantidades de transacciones, esto definitivamente tendrá un impacto notable en el rendimiento (por eso la optimización del rendimiento incluye agregar y eliminar índices para optimizar ciertas actividades realizadas en la base de datos).

Buena suerte

Cuestiones relacionadas