Con respecto a las preguntas de los índices, un índice no solo es deseable, sino que es necesario para "acelerar" las cosas. Según tengo entendido (en términos "profanos"), la función de un índice es acelerar las búsquedas y recuperaciones de datos dentro de una tabla.
Razones para usar índices:
- Identificar de forma única cada fila en cada tabla (después de todo, la clave principal es un índice)
- Los índices están ordenados (incluso si los datos no lo están)
- Acelere las búsquedas y los filtros:un índice hace que la recuperación de datos sea más rápida, ya que "retiene" la ubicación de los datos en la tabla ("señala" los datos que desea recuperar). También facilita que el motor de la base de datos filtre los datos (siempre es más rápido y sencillo filtrar ordenados datos que codificados datos)
- Optimice la forma en que se recuperan los datos cuando se usan tablas relacionadas:cada clave externa debe indexarse para acelerar las consultas que involucran relaciones de clave principal - externa
Algunas "reglas de pulgar" que utilizo para decidir qué campos deben indexarse:
- Cada clave principal está indexada (la obvia uno:una clave principal debe ser única y no nula)
- Todas las claves foráneas deben estar indexadas (para que las relaciones primarias - claves foráneas sean eficientes)
- Todos los campos numéricos o de fecha en los que necesito realizar búsquedas deben estar indexados. Dicho esto, trato de evitar
double
(o cualquier otro tipo numérico de coma flotante) campos que se indexarán, ya que generalmente se utilizan para almacenar valores que no están destinados a ser buscados. - Cada
char
ovarchar
El campo en el que necesito realizar búsquedas debe estar indexado. Intenta evitar los índices entext
campos, ya que pueden contener valores muy grandes en ellos. - Evitar binario de indexación (
blob
) campos... no tiene sentido - No caer en la tentación de indexarlo todo. Tómese su tiempo para decidir qué campos deben indexarse y qué campos no deben ser indexado.