Estoy haciendo mi mejor esfuerzo para convencer a mi jefe en dejarnos uso de claves foráneas en nuestras bases de datos – hasta ahora sin suerte.

Afirma que los costos de una cantidad significativa de rendimiento, y dice que sólo tendremos que tienen puestos de trabajo para la limpieza de las referencias no válidas ahora y entonces.

Obviamente, esto no funciona en la práctica, y la base de datos está inundada de referencias no válidas.

¿Alguien sabe de una comparación, de referencia o similares, lo que demuestra que no hay significante impacto en el rendimiento para el uso de claves foráneas? (Que espero convencerlo)

  • Sólo una actualización en toda la historia: Nos han permitido el uso de claves foráneas ahora, en la noción de que ellos podrían estar desactivados, si resultan en una pérdida de rendimiento. Así que gracias a todos por sus puntos buenos 🙂
InformationsquelleAutor Steffen | 2010-02-23

6 Comentarios

  1. 38

    Hay un pequeño impacto en el rendimiento en las inserciones, actualizaciones y eliminaciones porque el FK tiene que ser revisado. Para un registro individual suele ser tan leve como para ser imperceptible a menos que empiece a tener un ridículo número de FKs asociados a la tabla (Claramente se necesita más tiempo para comprobar de 100 tablas de 2). Esta es una buena cosa, no es una mala cosa como bases de datos sin la integridad son poco de fiar y por lo tanto inútil. Usted no debe de comercio integridad de velocidad. Que impacto en el rendimiento es generalmente compensado por la mejor capacidad para optimizar la ejecución de los planes.

    Tenemos un medio de tamaño de base de datos con alrededor de 9 millones de registros y FKs en todas partes deberían, y rara vez se observa un impacto en el rendimiento (excepto en un mal diseño de la tabla que tiene más de 100 claves foráneas, es un poco lento para eliminar registros de este como todo debe ser comprobado). Casi todos los dba sé de quién se ocupa de los grandes, de terabytes de tamaño de las bases de datos y una verdadera necesidad para un alto rendimiento de grandes conjuntos de datos, insiste en que las restricciones de clave externa porque la integridad es la clave para cualquier base de datos. Si las personas con terabytes de tamaño de las bases de datos pueden permitirse el muy pequeño impacto en el rendimiento, entonces usted también puede hacerlo.

    FKs no se indexan automáticamente y si no están indexados esto puede causar problemas de rendimiento.

    Honestamente, me gustaría tener una copia de su base de datos, agregar correctamente indexada FKs y mostrar la diferencia de tiempo para insertar, eliminar, actualizar y seleccione una de las tablas en comparación con el mismo a partir de su base de datos sin la FKs. Mostrar que no se causando un impacto en el rendimiento. A continuación, se muestran los resultados de las consultas que muestran los registros huérfanos que ya no tiene sentido porque el PK están relacionadas, ya no existe. Es especialmente eficaz para mostrar esto para las tablas que contienen información financiera («Tenemos 2700 pedidos que no podemos asociar con un cliente» se hacen de la gestión sentarse y tomar nota).

    • Muy útil la información. Actualmente estoy agregando llaves foráneas a una copia de la base de datos, sin embargo se necesita de algún tiempo, ya que tengo que eliminar como 20-30 millones de inválidos filas de la primera. Esto sólo demuestra cuán grande es el problema de la falta de llaves estaba en el primer lugar.
    • «Usted no debe de comercio integridad de velocidad» – y, sin embargo, que es lo que la mayoría de las bases de datos NoSql hace… En algunos casos puede ser vale la pena el equilibrio, pero uno debe tener muy en punto de referencia el efecto real antes de realizar la llamada.
    • y es por eso que las bases de datos NoSql son generalmente inadecuados para cualquier negocio serio aplicación, especialmente en sectores regulados como el de las finanzas y el cuidado de la salud.
  2. 17

    De Microsoft Patrones y Prácticas: el Capítulo 14 De la Mejora de Rendimiento de SQL Server:

    Cuando primarias y claves foráneas
    se define como las restricciones en la base de datos
    esquema, el servidor puede utilizar que
    información para crear óptimo
    los planes de ejecución.

    • claro, puede utilizar los índices para optimizar…pero eso no significa automáticamente que no hay ningún impacto negativo en el rendimiento. Creo también que son muchos los factores que intervienen para poner esta pregunta a dormir con esta referencia.
    • Entiendo tu punto de vista, y estoy de acuerdo con usted. Sin embargo, mi intención era abordar el «estoy haciendo mi mejor esfuerzo para convencer a mi jefe» parte de la pregunta.
    • Además, el impacto en el rendimiento es muy rara vez severa. Como usted dijo en su respuesta, esto es difícil de reclamación sin el conocimiento de la aplicación, pero en la práctica los beneficios de claves foráneas rara vez se comercializan para el rendimiento. Relacionadas de MANERA post: stackoverflow.com/questions/1744878/…
    • Buen enlace, voy a enviar lo que con la cita así 🙂
    • Lo que la declaración significa es que, por ejemplo, el optimizador de saber que una columna definida como el único miembro de una clave principal es que ambos no nulos y definida de forma única. Del mismo modo, de una sola columna de clave externa del número de valores distintos que se ve limitada por la cardinalidad de la tabla de la que depende (además de, posiblemente, null).
  3. 6

    Que esto es más un problema político que técnico. Si su proyecto de gestión no ve ningún valor en el mantenimiento de la integridad de sus datos, usted necesita estar en un proyecto diferente.

    Si su jefe no sabe ya o servicio que haya miles de referencias inválidas, él no va a empezar a cuidar sólo porque le dicen al respecto. Me solidarizo con los otros carteles aquí que están tratando de exhorto a hacer «lo correcto» por la buena lucha, pero lo he intentado muchas veces antes y en la práctica no funciona. La historia de David y Goliat hace una buena lectura, pero en la vida real es una propuesta perdedora.

    • Estoy de acuerdo con @Dave aquí, pero os animo a seguir luchando la buena lucha de todos modos. Es lamentable que en ocasiones la administración ha temores acerca de las cosas que ellos (claramente, aunque se le dice en voz baja) no lo entiendo. Este costes de las empresas, no sólo en dólares por el tiempo de rectificar los problemas que no tiene por qué haber ocurrido en el primer lugar, pero se desalienta la creatividad y la dinámica de las soluciones de las personas que están mejor equipados para diseñar las soluciones. Conservo el «never say die» actitud, hasta que una prueba sólida o refutar…mucho a la irritación de mis superiores…
  4. 4

    ¿Alguien sabe de una comparación, de referencia o similares, lo que demuestra que no hay significante impacto en el rendimiento para el uso de claves foráneas ? (Que espero convencerlo)

    Creo que estamos haciendo por el camino equivocado. Puntos de referencia nunca de convencer a nadie.

    Lo que usted debe hacer, es la primera descubrir los problemas que resultan de la no utilización de restricciones foreign key. Tratar de cuantificar cuánto trabajo cuesta para «limpiar las referencias no válidas». Además, probar y calibrar cómo muchos de los errores resultan en el proceso de negocio a causa de estos errores. Si usted puede adjuntar una cantidad para que – incluso mejor.

    Ahora un punto de referencia – usted debe intentar y conseguir la penetración en su carga de trabajo, identificar qué tipo de operaciones se realizan con más frecuencia. A continuación, configurar un entorno de pruebas, y la reproducción de las operaciones con claves foráneas en el lugar. Luego de comparar.

    Personalmente yo no diría de inmediato sin conocimiento de las aplicaciones que se ejecutan en la base de datos de claves foráneas no del desempeño de los costos. Especialmente si usted tiene eliminaciones en cascada y/o actualizaciones en combinación con compuestos naturales de las claves principales, entonces yo personalmente tendría algo de miedo de los problemas de rendimiento, especialmente agotado o interbloqueo operaciones, debido a los efectos secundarios de las operaciones en cascada.

    Pero nadie puede decirle a usted – usted tiene a prueba a ti mismo, con tus datos, tu carga de trabajo, el número de usuarios simultáneos, el hardware, las aplicaciones.

    • Buen punto sobre la aplicación, sin embargo, las tablas son muy simples – todas las claves principales de la identidad enteros, y no tenemos eliminación en cascada/actualizaciones. Así que, básicamente, es tan simple como parece 😀
    • Steffen, que es información útil. Yo probablemente no habría ningún tipo de reservas, a menos que lidiar con los enormes escribir cargas.
    • Creo que estamos haciendo de manera más leer que escribir, así que esto no debería ser un gran problema. Gracias por el comentario 🙂
  5. 3

    Está bien para estar preocupados por el rendimiento, pero haciendo paranoico decisiones no es.

    Puede escribir fácilmente de referencia código para mostrar resultados, pero primero tendrás que averiguar lo que el rendimiento de su jefe se preocupa y detalle exactamente esas métricas.

    Tan lejos como las referencias no válidas ar de que se trate, si usted no permite valores nulos en el extranjero teclas, usted no conseguirá que las referencias no válidas. La base de datos esception si intenta asignar un inválido de clave externa que no existe. Si usted necesita «nulos», asignar una tecla a ser «INDEFINIDO» o algo por el estilo, y hacer que la clave por defecto.

    Finalmente, explicar la base de datos de la normalización de los problemas a su jefe, porque creo que usted encontrará rápidamente que este problema va a ser más de un problema de clave externa de rendimiento nunca será.

    • Estoy bastante seguro de que no es exacto métrica de rendimiento él está preocupado, ya que sólo los estados «duele rendimiento» y que eso es todo. Obviamente, esto no lo hace más fácil para demostrarle su error 🙁
    • Si alguien necesita «nulos» puede tener valores null columnas, no va a crear problemas en FKs. Me parece que la técnica de adición de la «costumbre» «null filas» en tablas principales y para no agregar una columna que acepta valores null en la tabla externa es peor que el no uso de FKs a todos.
    • Si usted no tiene FKs, entonces no permite valores nulos en el FK columna no hace nada para evitar que entren en una inválida. Y no el hombre para que el registro no podrá obtener huérfanos si el original PK registro es eliminado o cambiado.
  6. 1

    Un factor significativo en el costo sería el tamaño del índice de la clave externa referencias – si es pequeño y se utiliza con frecuencia, el impacto en el rendimiento será insignificante, grandes y con menos frecuencia utiliza los índices tendrá más impacto, pero si su clave externa está en contra de un índice agrupado, todavía no debería ser un gran éxito, pero @Ronald Bouman es correcto – usted necesita para poner a prueba para estar seguro.

Dejar respuesta

Please enter your comment!
Please enter your name here