Pregunta

Estamos diseñando una base de datos en la que necesito considerar algunos FK (clave externa) restricciones Pero no se limita a Estructuración formal y normalización. Lo hacemos solo si proporciona alguna beneficios de rendimiento o escalabilidad.

He estado revisando algunos artículos interesantes y buscando en Google beneficios prácticos. Aquí hay algunos enlaces:

http://www.mssqltips.com/tip.asp?tip=1296

Quería saber más sobre los beneficios de FK (aparte de la estructuración formal y la famosa eliminación / actualización en cascada).

  • FK no están 'indexados' de forma predeterminada, ¿cuáles son las consideraciones al indexar un FK?

  • Cómo manejar los campos anulables que se asignan como clave externa: ¿está permitido?

  • Además de la indexación, ¿esto ayuda a optimizar los planes de ejecución de consultas en SQL-Server?

Sé que hay más, pero preferiría que los expertos hablaran sobre esto. Por favor guíame.

¿Fue útil?

Solución

  • Las claves externas no proporcionan beneficios de rendimiento o escalabilidad.
  • Las claves externas imponen integridad referencial. Esto puede proporcionar un beneficio práctico al generar un error si alguien intentó eliminar filas de la tabla principal por error.
  • Las claves foráneas no están indexadas de forma predeterminada. Debe indexar sus columnas de claves externas, ya que esto evita un escaneo de la tabla en la tabla secundaria cuando elimina / actualiza su fila principal.
  • Puede hacer que una columna de clave foránea sea anulable e insertar nula.

Otros consejos

El principal beneficio es que su base de datos no terminará siendo inconsistente si su código de cliente con errores intenta hacer algo mal. Las claves foráneas son un tipo de "restricción", así que así es como debe usarlas.

No tienen ningún "funcional" beneficio, no optimizarán nada. Todavía tiene que crear índices usted mismo, etc. Y sí, puede tener valores NULL en una columna que es una clave foránea.

Las restricciones FK mantienen sus datos consistentes. Eso es. Este es el principal beneficio. Las restricciones de FK no le proporcionarán ninguna ganancia de rendimiento.

Pero, a menos que haya desnormalizado a propósito la estructura db, le recomendaría que use restricciones FK. La razón principal: consistencia.

He leído al menos un ejemplo en la red en el que se demostró que las claves externas mejoran el rendimiento porque el optimizador no tiene que hacer verificaciones adicionales en las tablas porque sabe que los datos cumplen ciertos criterios ya vencidos a la FK. Lo siento, no tengo un enlace, pero el blog dio una salida detallada de los planes de consulta para probarlo.

Como se mencionó, son para la integridad de los datos. Cualquier rendimiento " pérdida " sería completamente eliminado por el tiempo requerido para reparar los datos rotos.

Sin embargo, podría haber un beneficio indirecto en el rendimiento.

Al menos para SQL Server, las columnas en el FK deben tener el mismo tipo de datos en cada lado. Sin un FK, podría tener un padre nvarchar y un hijo varchar, por ejemplo. Cuando se une a las 2 tablas, obtendrá conversiones de tipo de datos que pueden afectar el rendimiento.

Ejemplo: diferentes longitudes de varchar que causan un problema

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top