lunes, 13 de abril de 2009

Índices

Un índice no es más que una orden para que el servidor de base de datos haga una reorganización física de la tabla respecto a unas normas (índices). Pero claro, si sobre una tabla con muchos índices hacemos muchos INSERT/UPDATE/DELETE (operaciones DML), eso implica un coste muy importante. Con lo que puede al final ir más lento con índices que sin ellos.

Hay que tener en cuenta:

  • Las consultas más frecuentes deberían tener índices. El que hace la aplicación sabe cuál es más frecuente.
  • Esto es muy importante con campos VARCHAR, cuya búsqueda no indexada es horrible (FULL SCAN).
  • No hay que tener demasiados índices. Nunca 20, por ejemplo. A ser posible, máximo 6 ó 7. Se puede buscar qué consultas son más frecuentes y priorizar.
  • Una PK implica un índice.
  • Una FK también implica un índice. Es decir, si tenéis una tabla NOTICIA con un ID_TEMA que es FK a la PK de una tabla TEMA (ID_TEMA)... ya tenéis un índice sobre ID_TEMA, no hay que volver a hacerlo.
  • los índices deben hacerse para campos que normalmente no deberían permitir valores nulos

Esto es una explicación muy buena de un compañero de mi trabajo.