Cada vez que estableces una restricción (Primary Key, Foreign Key, Unique Key) el Firebird automáticamente crea un índice asociado para esa restricción.

Por lo tanto, no deberías crear un índice sobre esas mismas columnas ya que si haces eso tendrás dos índices idénticos y eso te acarreará dos problemas.

  1. El Firebird podría confundirse sobre cual índice usar y por lo tanto tu consulta será más lenta de lo que debería
  2. Cada vez que insertes una fila (o actualices una columna involucrada en el índice que creaste) el Firebird deberá actualizar dos índices y eso lo hará más lento.

Sin embargo…hay una excepción a esta regla.

Por defecto, el Firebird crea los índices de forma ascendente (es decir: 1, 2, 3, 4, 5, 6, 7, etc.) y a veces para tus consultas podrías necesitar un índice descendente. Y en esos casos sí deberías crear el índice.

Por ejemplo, si usas la función MAX() en una consulta, tener un índice descendente sobre esa columna te aumentará la velocidad de respuesta de forma impresionante.

Otro ejemplo, si deseas que la consulta te aparezca ordenada en forma descendente un índice descendente es lo adecuado.

Entonces, no crees un índice sobre una columna que tiene una restricción (Primary Key, Foreign Key, Unique Key) porque el Firebird ya crea ese índice por su propia cuenta. Las únicas excepciones son si necesitas ordenar una consulta en forma descendente o si empleas la función MAX().

Artículo relacionado:

El índice del blog Firebird21

Anuncios