¿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 está indexada automáticamente en MySQL?
Respuesta
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.
No tiene que crear explícitamente un índice para una clave primaria ... se realiza de forma predeterminada.
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.
Según http://dev.mysql.com/doc/refman/5.0/en/constraint-primary-key.html parecería que esto es sería implícita
Encontré ese enlace buscando antes de hacer la pregunta. Pero no parece implicar eso ni nada más sobre esta pregunta para mí. –
La página vinculada a en esta respuesta no parece decir nada acerca de si una clave principal también es un índice. Las páginas vinculadas en la [respuesta] (https://stackoverflow.com/a/13979135/245602) de @fyrye son más relevantes. –
pesar de que este se le pidió en 2009 pensé que había puesto una referencia real a la documentación de MySQL en las claves primarias. http://dev.mysql.com/doc/refman/5.5/en/optimizing-primary-keys.html
El clave principal para una tabla representa la columna o conjunto de columnas que utiliza en sus consultas más vitales. Tiene un índice asociado, de rendimiento de consulta rápida
Para MySQL 5.0 Reference, véase: http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html
La mayoría de MySQL índices (PRIMARIA CLAVE, único, índice y FULLTEXT) son almacenados en B-trees. Las excepciones son que los índices en los tipos de datos espaciales usan árboles R, y que las tablas MEMORY también admiten índices hash.
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)
Los índices se utilizan mejor en columnas que se utiliza con frecuencia en las cláusulas where, y en cualquier tipo de clasificación, tales 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 utilizarlas con cuidado en las columnas que se actualizan con FRECUENCIA.
Los índices 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 utilizar un índice que dejarlo fuera y simplemente dejarlo hacer una exploración de tabla.
Los índices realmente solo son útiles con las tablas que tienen muchas filas.
Otra cosa a recordar, esto es una estafa en la situación de la base de datos de nuestros empleados, es que si la columna es una longitud variable, índices (así como la mayor parte de MySQL) realizar mucho menos eficiente.
¡No te olvides de 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 ha creado una mesa 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 desea indexar la clave principal y hacer cumplir una restricción de unicidad en él, que le realidad terminan creando tres índices en foo
!
- 1. ¿la clave principal siempre está indexada en el servidor sql?
- 2. ¿La clave principal es automáticamente un índice?
- 3. ¿Se indexa automáticamente una clave principal?
- 4. ¿La clave principal siempre está agrupada?
- 5. Restablecer la clave principal en mysql?
- 6. Clave principal de dos columnas en MySQL
- 7. Mysql - Agregar auto_increment a la clave principal
- 8. MySQL clave principal de multicolumna
- 9. mysql LOAD DATA INFILE con autoincremento de la clave principal
- 10. Cómo aumentar automáticamente la clave no principal? - Servidor
- 11. SQL: establecer la columna existente como clave principal en MySQL
- 12. Selección de Mysql en la desaceleración de la columna indexada en tablas grandes
- 13. Tamaño de clave principal/externa de MySQL?
- 14. MySQL - usando String como clave principal
- 15. MySQL - Usar clave externa como clave principal también
- 16. Clave principal MySQL UUID: ¿generada por PHP o por MySQL?
- 17. MySQL: Determinar la tabla de clave principal dinámicamente
- 18. MySQL LOAD DATA INFILE - Cargando un archivo sin clave principal
- 19. ¿Obtener la clave principal de la tabla?
- 20. Vistas de MySQL en Navicat: cómo definir 'clave principal'?
- 21. Clave principal de múltiples columnas en MySQL 5
- 22. MySQL Query IN() Cláusula lento en columna indexada
- 23. Cómo puedo ALTERAR LA COLUMNA a NOT NULL cuando la columna está indexada
- 24. Cambiar clave principal a clave compuesta (la clave principal ya existe)
- 25. ¿Cómo crear una clave externa que también es una clave principal en MySQL?
- 26. Clave principal grande: 1+ mil millones de filas MySQL + InnoDB?
- 27. PHP mySQL - Insertar nuevo registro en la tabla con autoincremento en la clave principal
- 28. ¿Una clave principal de MySQL en dos columnas ayuda con las consultas en la segunda columna?
- 29. MySQL - cómo usar VARCHAR como INCREMENTO AUTOMÁTICO Clave principal
- 30. ¿Cómo insertar datos en MySQL con la clave primaria incrementada automáticamente?
Si la clave principal siempre está indexada, ¿por qué las personas cuando hablan sobre la arquitectura/rendimiento de la base de datos siempre aconsejan a los recién llegados a SQL que "se aseguren de que su base de datos esté correctamente indexada"? –
@tim: le dicen a las personas que se aseguren de que cualquier otra columna utilizada para filtrar, agrupar o ordenar también tenga índices. –
¡No olvide unir también! Los campos de unión indexada aceleran las cosas. – JustJohn