Ver Mensaje Individual
  #2 (permalink)  
Antiguo 01/02/2008, 05:10
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años, 3 meses
Puntos: 2658
Re: PK compuesta o varios index

Para responderte deberíamos recordar lo mejor posible qué significa PK y qué es un índice:

- Primary Key (PK) es un atributo o conjunto de atributos (campos) que identifica unívocamente una instancia (registro) de una relación (tabla).
Dicho esto, entonces una PK compuesta puede aparecer cuando la tabla en cuestión no tiene ningún atributo propio que asegure esa identificación. En este sentido, si tal es la cosa, puedes usarla compuesta o... Normalizar la tabla y ponerla en 3FN, lo que implica que si no hay un determinante de la relación se le agrega uno (p.e. un PK numérico incremental) y listo.

- Los índices son sistemas de registros que mantienen un ordenamiento predefinido de los registros según ciertos criterios basados en los atributos propios de esa relación. En definitiva, para el SO son archivos, por lo que la forma en que los definas afectará el rendimiento y el volumen de los mismos.
Sabemos que existen dos tipos de índices: Densos y dispersos. Se define como índice denso a un índice de alta selectividad y en el cual cada posición remite a la posición física del registro buscado; además se usan para la optimización física de los registros, por lo cual no puede existir más que uno por tabla. Estos son los índices de PK. Como te imaginas, si usas un criterio de clave compuesta para generar un índice primario, la optimización de las tablas y de la base entera bajaría enormemente su performance, ya que no es lo mismo ordenar 3.000.000 de registros por un único campo, que por cinco campos.
Los índices dispersos (a grandes rasgos) son índices paginados basados en Árboles B, en los que cada entrada puede contener un conjunto de registros, de modo que la búsqueda de un registro definido puede implicar la lectura en varios niveles del árbol para recuperar las páginas del índice. La eficiencia de estos índices está en las búsquedas y no en la optimización de las tablas, para los que no tienen efecto.

Resumiendo:

1. Mientras más pequeña sea la clave y más unívoca la identidad, mejor para la optimización. No combines campos para las PK a menos que no exista otra alternativa.

2. Los índices INDEX, HASH o TREE son relativamente independientes de los PRIMARY. de los primeros puedes tener tantos como te sean eficientes en las búsquedas. De los segundos sólo uno.

3. Si los índices carecen de efecto en las búsquedas, entonces o están mal definidos o son innecesarios. Para saber si están mal definidos, fijate en la sentencia de la consulta y fíjate qué conjunto de datos combinados NUNCA se repite, no importa cuçántos registros tenga la tabla. Esos son los componentes del índice.