¿La clave principal está indexada automáticamente en MySQL?

¿Necesita crear explícitamente un índice o está implícito al definir la clave principal? ¿Es la respuesta la misma para MyISAM e InnoDB?

La clave principal siempre está indexada. Esto es lo mismo para MyISAM e InnoDB, y generalmente es cierto para todos los motores de almacenamiento que en absoluto admite índices.

Según http://dev.mysql.com/doc/refman/5.0/en/constraint-primary-key.html , parece que esto sería implícito

Aunque esto se solicitó en 2009, calculé que publicaría una referencia real de la documentación de MySQL en las claves principales. http://dev.mysql.com/doc/refman/5.5/en/optimizing-primary-keys.html

La clave principal para una tabla representa la columna o conjunto de columnas que utiliza en sus consultas más importantes. Tiene un índice asociado, para un rápido rendimiento de consulta

Para referencia de MySQL 5.0 ver: http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

La mayoría de los índices de MySQL ( PRIMARY KEY , UNIQUE, INDEX y FULLTEXT) se almacenan en B-trees. Las excepciones son que los índices en tipos de datos espaciales usan árboles R, y que las tablas MEMORY también admiten índices hash.

La clave principal está indexada implícitamente para MyISAM e InnoDB. Puede verificar esto utilizando EXPLAIN en una consulta que hace uso de la clave principal.

No tiene que crear explícitamente un índice para una clave primaria … se hace de forma predeterminada.

Creo que esta es la respuesta

mysql> create table test(id int primary key, s varchar(20)); Query OK, 0 rows affected (0.06 sec) mysql> show indexes from test \G *************************** 1. row *************************** Table: test Non_unique: 0 Key_name: PRIMARY Seq_in_index: 1 Column_name: id Collation: A Cardinality: 0 Sub_part: NULL Packed: NULL Null: Index_type: BTREE Comment: Index_comment: 1 row in set (0.00 sec) 

Los índices se utilizan mejor en columnas que se utilizan con frecuencia en cláusulas WHERE y en cualquier tipo de clasificación, como “ordenar por”. Es posible que esté trabajando en una base de datos más compleja, por lo que es bueno recordar algunas reglas simples.

  • Los índices ralentizan las inserciones y las actualizaciones, por lo que debe usarlas cuidadosamente en las columnas que se actualicen con FRECUENCIA.
  • Los índices se aceleran donde las cláusulas y ordenan. Recuerde pensar cómo se usarán sus datos al construir sus tablas. Hay algunas otras cosas para recordar. Si su tabla es muy pequeña, es decir, solo unos pocos empleados, es peor usar un índice que dejarlo fuera y simplemente dejarlo hacer un escaneo de tabla.

  • Los índices realmente solo son útiles con tablas que tienen muchas filas.

  • Otra cosa para recordar, que es una estafa en la situación de la base de datos de nuestros empleados, es que si la columna tiene una longitud variable, los índices (al igual que la mayoría de MySQL) funcionan de manera mucho menos eficiente.

  • ¡No olvide unir también! Los campos de unión indexada aceleran las cosas.

La clave principal siempre se indexa automáticamente y es única. Por lo tanto, tenga cuidado de no crear índices redundantes.

Por ejemplo, si creó una tabla como tal

 CREATE TABLE mytable (foo INT NOT NULL PRIMARY KEY, bar INT NOT NULL, baz INT NOT NULL, UNIQUE(foo), INDEX(foo)) ENGINE=InnoDB; 

porque quiere indexar la clave primaria y aplicarle una restricción de exclusividad, ¡en realidad terminaría creando tres índices en foo !