sql >> Base de Datos >  >> RDS >> Mysql

Índices de MySQL 5.0:únicos frente a no únicos

UNIQUE y PRIMARY KEY son restricciones , no índices. Aunque la mayoría de las bases de datos implementan estas restricciones mediante el uso de un índice. La sobrecarga adicional de la restricción además del índice es insignificante, especialmente cuando cuenta el costo de rastrear y corregir duplicados no intencionales cuando (no si) ocurren.

Los índices suelen ser más efectivos si tiene una alta selectividad . Esta es la relación entre el número de valores distintos y el número total de filas.

Por ejemplo, en una columna para Número de Seguro Social, puede tener 1 millón de filas con 1 millón de valores distintos. Entonces, la selectividad es 1000000/1000000 =1.0 (aunque hay raras excepciones históricas, los SSN están destinados a ser únicos).

Pero otra columna en esa tabla, "género" solo puede tener dos valores distintos en 1 millón de filas. 2/1000000 =muy baja selectividad.

Se garantiza que un índice con una restricción UNIQUE o PRIMARY KEY tendrá una selectividad de 1.0, por lo que siempre será tan efectivo como un índice.

Preguntaste sobre la diferencia entre una clave principal y una restricción única. Principalmente, es que solo puede tener una restricción de clave principal por tabla (incluso si la definición de esa restricción incluye varias columnas), mientras que puede tener varias restricciones únicas. Una columna con una restricción única puede permitir valores NULL, mientras que las columnas con restricciones de clave principal no deben permitir valores NULL. De lo contrario, la clave principal y la única son muy similares en su implementación y uso.

Preguntaste en un comentario si usar MyISAM o InnoDB. En MySQL, usan el término motor de almacenamiento . Hay muchas diferencias sutiles entre estos dos motores de almacenamiento, pero las principales son:

  • InnoDB admite transacciones, por lo que puede elegir revertir o confirmar cambios. MyISAM siempre se confirma automáticamente.
  • InnoDB impone restricciones de clave externa. MyISAM no aplica ni almacena restricciones de clave externa.

Si estas características son cosas que necesita en su aplicación, entonces debe usar InnoDB.

Para responder a su comentario, no es tan simple. InnoDB es en realidad más rápido que MyISAM en bastantes casos, por lo que depende de la combinación de selecciones, actualizaciones, consultas simultáneas, índices, configuración de búfer, etc. de su aplicación.

Consulte http:/ /www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/ para una comparación de rendimiento muy completa de los motores de almacenamiento. InnoDB gana a MyISAM con tanta frecuencia que claramente no es posible decir que uno es más rápido que el otro.

Como ocurre con la mayoría de las preguntas relacionadas con el rendimiento, la única forma de responderlas para su aplicación es probar ambas configuraciones utilizando su aplicación y una muestra representativa de datos, y medir los resultados.