2009-02-18 10 views
37

¿Qué significa la palabra clave indexada y qué función sirve? Entiendo que está destinado a acelerar las consultas, pero no estoy muy seguro de cómo se puede hacer.MYSQL: Palabra clave de índice en la tabla de creación y cuándo usarla

¿Cuándo elegir la columna que se indexará?

Una muestra de uso del índice se muestra a continuación en crear tabla de consulta:

CREATE TABLE `blog_comment` 
(
    `id` INTEGER NOT NULL AUTO_INCREMENT, 
    `blog_post_id` INTEGER, 
    `author` VARCHAR(255), 
    `email` VARCHAR(255), 
    `body` TEXT, 
    `created_at` DATETIME, 
    PRIMARY KEY (`id`), 
    INDEX `blog_comment_FI_1` (`blog_post_id`), 
    CONSTRAINT `blog_comment_FK_1` 
     FOREIGN KEY (`blog_post_id`) 
     REFERENCES `blog_post` (`id`) 
)Type=MyISAM 

;

Respuesta

32

Recomiendo leer How MySQL Uses Indexes del MySQL Reference Manual. Indica que los índices se usan ...

  • Para encontrar las filas que coinciden con una cláusula WHERE rápidamente.
  • Para eliminar las filas de la consideración.
  • Para recuperar filas de otras tablas cuando se realizan uniones. Para obtener el valor MIN() o MAX() para una columna indexada específica
  • Para ordenar o agrupar una tabla (bajo ciertas condiciones).
  • Para optimizar consultas utilizando solo índices sin consultar las filas de datos.

Los índices en una base de datos funcionan como un índice en un libro. Puede encontrar lo que está buscando en un libro más rápido, porque el índice está en orden alfabético. En lugar de una lista alfabética, MySQL usa B-trees para organizar sus índices, que es más rápido para sus propósitos (pero tomaría mucho más tiempo para un humano).

Usar más índices significa agotar más espacio (así como la sobrecarga de mantener el índice), por lo que realmente vale la pena utilizar índices en columnas que cumplan los criterios de uso anteriores.

En su ejemplo, las columnas id y blog_post_id ambos usan índices (PRIMARY KEY también es un índice) para que la aplicación pueda encontrarlos más rápido. En el caso de id, es probable que esto permita a los usuarios modificar o eliminar un comentario rápidamente, y en el caso de blog_post_id, por lo que la aplicación puede encontrar rápidamente todos los comentarios para una publicación determinada.

Notarás que no hay índice para la columna email. Esto significa que la búsqueda de todas las publicaciones de blog por una dirección de correo electrónico en particular probablemente tomará bastante tiempo. Si desea agregar todos los comentarios de una dirección de correo electrónico en particular, es posible que también tenga sentido agregar un índice.

4

Esta palabra clave significa que está creando un índice en la columna blog_post_id junto con la tabla.

consultas como que:

SELECT * 
FROM blog_comment 
WHERE blog_post_id = @id 

usará este índice para buscar en este campo y correr más rápido.

Además, hay un foreign key en esta columna.

Cuando decida eliminar una publicación de blog, la base de datos deberá verificar esta tabla para ver que no haya comentarios huérfanos. El índice también acelerará esta comprobación, por lo que las consultas como

DELETE 
FROM blog_post 
WHERE ... 

también se ejecutarán más rápido.

Cuestiones relacionadas