remove primary length index example create constraint mysql database indexing key

primary - remove index mysql



¿La clave primaria se indexa automáticamente en MySQL? (8)

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


Aunque esto se solicitó en 2009, pensé que publicaría una referencia real a 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 de una tabla representa la columna o el conjunto de columnas que utiliza en sus consultas más importantes. Tiene un índice asociado, para un rápido rendimiento de las consultas.

Para referencia de MySQL 5.0, consulte: 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 árboles B. Las excepciones son que los índices de los tipos de datos espaciales usan árboles R y que las tablas de MEMORIA también admiten índices hash.


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


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 admiten índices.


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

Por ejemplo, si ha creado 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 quieres indexar la clave principal y aplicar una restricción de singularidad, ¡en realidad terminarás creando tres índices en foo !


Los índices se utilizan mejor en las columnas que se usan con frecuencia en las 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 actualizaciones, por lo que desea utilizarlos con cuidado en las columnas que se actualizan con frecuencia.
  • Los índices se aceleran donde las cláusulas y orden por. Recuerde pensar en CÓMO se utilizará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 dejar que haga una exploración de la tabla.

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

  • Otra cosa para recordar, que es una desventaja en la situación de la base de datos de nuestros empleados, es que si la columna es de longitud variable, los índices (así como la mayoría de MySQL) tienen un rendimiento mucho menos eficiente.

  • No te olvides de unirse también! Los campos de unión indexados aceleran las cosas.


No tiene que crear explícitamente un índice para una clave principal ... se realiza de forma predeterminada.



Supongo 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)