En SQL Server 2005, tengo una tabla con dos columnas: parent_id (int)
y child id (int)
. Quiero hacer una clave compuesta de ellos, porque solo quiero exactamente una instancia por combinación posible en la tabla.clave primaria compuesta e índices adicionales
La mayoría de las operaciones de búsqueda se realizarán en el campo parent_id
, algunas en el child_id
y solo las esporádicas en ambos campos juntas.
He planeado hacer un índice en el campo parent_id
y tal vez también uno en el campo child_id
. ¿Es esto significativo o es SQL Server 2005 capaz de utilizar la clave primaria compuesta en clúster para búsquedas indexadas en una sola columna (principalmente el parent_id
) y, por lo tanto, el índice no es necesario/prescindible?
Sé que esta es una publicación anterior, pero estoy viendo el mismo problema. No entiendo la respuesta. Si tengo una clave compuesta en ParentID y ChildID. ¿Cómo se determina que puede "usar el compuesto para búsquedas en ambas columnas o solo parent_id, pero no puede usarse para búsquedas en child_id solamente. Si lo necesita". ParentID y ChildID son idénticos, entonces, ¿cómo puede usar el índice compuesto para buscar en uno pero no en el otro? – mark1234
@ mark1234: Piénselo como una cadena. No puede alcanzar el nivel ChildID a menos que pase primero por el nivel ParentID. Es por eso que los índices en solo ChildID no pueden usar el índice. No hay filtro ParentID en la consulta para llevarlo a ese ChildID. –
Gracias por su respuesta joe. Ahí es donde estoy confundido. Si solo son dos entradas en una tabla, entonces, ¿por qué usará un índice si digo "WHERE ParentID = 1 y no" Where ChildID = 1 ". ¿Hay algún tipo de ordinalidad en las columnas de un índice? Por ejemplo, Definí composite como (ChildID, ParentID) las consultas en ChildID lo usarían y ParentID's no? – mark1234