¿Todavía necesita indexación después de la normalización de la base de datos?

14

Después de haber realizado una buena normalización, ¿aún necesita indexar la tabla? ¿Cómo va a afectar esto el rendimiento? ¿Afectará incluso el rendimiento de alguna manera después de una buena normalización?

¿Qué columnas suelen indexarse ​​si ya tiene la clave primaria y la clave externa?

Parece que ya es efectivo normalizar una base de datos. Pero, podría haber omitido cómo la indexación afecta la base de datos. ¿Esto solo es efectivo cuando se utilizan consultas? ¿Cómo funciona / funciona y mejora una base de datos?

Franz Noel
fuente
55
¿Qué columnas suelen indexarse ​​si ya tiene la clave primaria y la clave externa? Fechas. Nombres. Cualquier cosa que necesite buscar u ordenar.
Carson63000
¿El índice en la clave primaria no cuenta?
CodesInChaos

Respuestas:

34

Si. De hecho, es muy posible que deba prestar más atención a sus índices. La normalización se trata de un almacenamiento óptimo . Eso a menudo está en desacuerdo con la velocidad de recuperación , ya que se utilizan consultas más complejas con combinaciones complicadas. A veces, las personas que mantienen bases de datos que requieren velocidades de recuperación rápidas se normalizarán o organizarán sus datos en estructuras ligeramente menos normalizadas para facilitar la recuperación.

Gran maestro B
fuente
21
El objetivo de la normalización no es la eficiencia del almacenamiento, sino la eliminación de las dependencias de inserción, actualización y eliminación. Lectura adicional
44
Estoy de acuerdo con @MichealT en que no se trata de eficiencia. La coherencia lógica fue lo que obtuve del enlace.
JeffO
Eliminaré la controvertida palabra 'eficiencia' (aunque creo que básicamente resume el propósito general de la normalización) y simplemente usaré la palabra 'óptimo' en su lugar, dejando lo que eso significa al lector. El propósito real de la normalización no es realmente relevante por qué los índices todavía son necesarios después de que se normaliza una base de datos.
GrandmasterB
56

Creo que entendió mal lo que hace la indexación para el rendimiento de la base de datos.

Un índice ayuda a la base de datos a encontrar filas. Los índices son estructuras de datos especializadas que, a cambio de espacio en disco adicional y algo de rendimiento al insertar y actualizar, ayudan al motor de la base de datos a ubicarse en filas coincidentes.

Debido a que requieren espacio adicional y un costo (un mínimo de) rendimiento para mantenerlos actualizados, usted, como diseñador de la base de datos, debe crear índices explícitamente para adaptarse a su aplicación y patrones de consulta.

Los índices son ortogonales a la normalización de la base de datos.

Martijn Pieters
fuente
4

Sí, después de la normalización, todavía necesita indexación.

Las tablas con las que está trabajando se benefician tanto como las tablas que tenía antes de la normalización. En realidad, por sí solos son lo mismo: tablas.

Sin embargo, una cosa que debe tener en cuenta es que los índices lo ayudan a encontrar su camino más rápidamente. La normalización de un diseño de una base de datos siempre es buena, pero a veces por razones de rendimiento hay que desnormalizar la implementación. Pero eso es solo caso por caso.

Pieter B
fuente
2

Si.

Los índices son un método para acelerar la búsqueda de datos. Algunas consultas son por claves primarias, que generalmente son indexadas implícitamente por el motor de la base de datos, pero es probable que otras consultas usen otras columnas. A menudo, algunas consultas buscan por columnas que ni siquiera son únicas y, por lo tanto, no pueden convertirse en claves principales después de cualquier normalización. Probablemente tendrá que indexar dichas columnas.

Solo hay una forma de saber qué índices crear. Tome todas las consultas en la aplicación, encuentre parámetros de ejemplo representativos para ellas y haga que el motor de la base de datos muestre sus planes de consulta (todos los motores de la base de datos tienen EXPLAIN, EXPLAIN QUERY PLANo un comando similar; se llama de manera diferente en diferentes motores) y pruebe cuánto tiempo tardan. Que crear índices que aceleren los que fueron lentos. Y no olvides volver a soltar los índices que intentaste pero no ayudaste a evitar el desperdicio de recursos.

Jan Hudec
fuente
1

Los índices generalmente se necesitan en todas las tablas excepto en las más pequeñas. Casi todas las claves externas deben indexarse ​​y solo configurar un FK no significa que tenga un índice (al menos no en algunas bases de datos, consulte la documentación de db). Campos en los que se une o utiliza con frecuencia en donde las cláusulas deben indexarse ​​si son las que se beneficiarían (necesita una cierta variabilidad en los datos para que los booleanos no se beneficien, por ejemplo) y aquellas en las que es posible indexar.

Sin embargo, cada índice ralentiza las inserciones \ actualizaciones \ eliminaciones mientras acelera las selecciones, así que elija sus índices con cuidado.

Los índices son críticos para un rendimiento aceptable en una base de datos.

HLGEM
fuente
0

Para una tercera forma normal, definitivamente necesitará índices en todas las claves principales.

Si necesita otros índices depende de cómo se use su base de datos. Por ejemplo, si busca clientes regularmente en un código postal en particular, puede ser una buena idea indexar la columna zip_code en la tabla de clientes.

James Anderson
fuente