En este capítulo veremos una de las partes importantes de las bases de datos, se trata de los índices.
Tipos de índices
Principalmente hay 3 tipos de índices:
- Llaves primarias.
- Campos únicos.
- Llaves foráneas.
Declarar índices en nuestras bases de datos nos ayuda a mejorar la velocidad a la hora de buscar en nuestras bases de datos. Los índices van a ocupar espacio de almacenamiento nuestra base de datos, pero nos ayudan a que la base de datos sepa como poder ubicar un índice en una tabla, y que al ir a hacer consultas en base a ese índice, las consultas puedan ser más veloces que en base a un campo que no esté indexado.
Ver los índices de una tabla
Para ello tenemos la siguiente sintaxis.
Ejm
SHOW INDEX FROM usuarios;
Veamos un ejm para entenderlo.
Ejm
CREATE TABLE bandas ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(255), estilo VARCHAR(255), INDEX i_estilo (estilo), INDEX i_nombre (nombre) INDEX i_bandas (estilo, nombre) -- Índice múltiple ) -- Mostramos los índices de la tabla bandas SHOW INDEX FROM bandas;
Nota: si todos nuestros campos son índices, no estamos haciendo una buena optimización de nuestra base de datos.
Índice de tipo FULLTEXT
Este tipo crea un índice a partir de varios campos, con lo que se puede hacer un SELECT especial, en el cual podemos hacer una búsqueda hacia varios campos con un texto o un valor en particular, pero en lugar de hacerlo a un campo en particular, lo hacemos a varios. Se puede decir que es una búsqueda al estilo de Google. Este tipo de índice suele demandar más tiempo al motor de base de datos, por lo que hay que usarlo con cautela.
Para crearlo se utiliza la siguiente sintaxis.
Ejm
CREATE TABLE bandas ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(50) UNIQUE, estilo VARCHAR(50), bio TEXT FULLTEXT INDEX fi_search (nombre, estilo, bio) ) -- Cuando se haga una búsqueda, se buscará por los campos nombre, estilo y bio. -- Hacer un QUERY de tipo buscador, buscamos la palabra 'Heavy Metal' SELECT * FROM bandas WHERE MATCH(nombre, estilo, bio) AGAINST ('Heavy Metal' IN BOOLEAN MODE);
Modificación de índices
Ahora vamos a ver como agregar o eliminar índices, campos únicos e incluso llaves principales. Para ello vamos a utilizar la siguiente sintaxis. La palabra reservada CONSTRAINT es sólo para llaves primarias y campos únicos. La palabra reservada MODIFY es para el resto.
Ejm
ALTER TABLE bandas ADD CONSTRAINT pk_banda_id PRIMARY KEY (banda_id); -- Hacer autoincremental el campo banda_id ALTER TABLE bandas MODIFY COLUMN banda_id INT AUTO_INCREMENT; -- Hacer el campo estilo como un campo único ALTER TABLE bandas CONSTRAINT uq_estilo UNIQUE(estilo); -- Agregar índice común y corriente al campo bio ALTER TABLE bandas ADD INDEX i_bio (bio); -- Unir estilo y bio ALTER TABLE bandas ADD INDEX i_estilo_bio (estilo, bio); -- Crear campo de tipo FULLTEXT ALTER TABLE bandas ADD FULLTEXT INDEX fi_search (nombre, estilo bio); -- Eliminar índices -- Eliminamos el índice fi_search ALTER TABLE bandas DROP INDEX fi_search; -- Eliminamos el índice i_estilo_bio ALTER TABLE bandas DROP INDEX i_estilo_bio; -- Para llaves primarias y campos únicos se ha de utilizar DROP y CONSTRAIN simultáneamente -- Eliminar campo único uq_estilo ALTER TABLE bandas DROP CONSTRAINT uq_estilo;