Si mi tabla User
tiene varios campos que son consultables (digamos DepartmentId, GroupId, RoleId), ¿habrá alguna diferencia de velocidad si creo un índice para cada combinación de esos campos?¿Es necesario tener un índice en cada combinación de campos consultables en una tabla SQL para optimizar el rendimiento?
Por "consultable", me refiero a una pantalla de consulta donde el usuario final puede seleccionar registros en función del departamento, grupo o rol seleccionando desde un menú desplegable.
Por el momento, tengo un índice en DepartmentId, GroupId y RoleId. Es un índice único no único por campo.
Si un usuario final selecciona "nadie en el Grupo B", el SQL se parece a:
select * from User where GroupId = 2
Tener un índice en GroupId debe acelerar ese proceso.
Pero si el usuario final seleccionar "nadie en el grupo B y en papel C", el SQL se vería así:
select * from User where GroupId = 2 and RoleId = 3
Tener índices en GroupId y RoleId individual no puede hacer ninguna diferencia, ¿verdad?
Un mejor índice para esa búsqueda sería si tuviera un índice que abarcara ambos GroupId y RoleId.
Pero si ese es el caso, entonces eso significaría que necesitaría tener un índice para cada combinación de campos consultables. Por lo que iba a necesitar todos estos índices:
- DepartmentID
- GroupId
- RoleId
- DepartmentID y GroupId
- DepartmentID y RoleId
- GroupId y RoleId
- ID de departamento, GroupId y RoleId
¿Alguien puede arrojar algo de luz sobre esto? Estoy usando MySQL si eso hace la diferencia.
Tenga en cuenta que el orden de las columnas es importante (GroupId, RoleId) * no * es igual que (RoleId, GroupId). Por lo tanto, a su lista le faltan varios indicadores adicionales.De lo contrario, el comentario de @ Joe sobre la fusión de índices es bueno (DB2 también lo usa, con buenos resultados). –