Sentencia SQL CREATE INDEX con MySql

Los índices son tablas de búsqueda especiales que utiliza el motor de búsqueda de la base de datos para agilizar el retorno de datos. También organizan la manera en la que la base de datos guarda los datos.

 

Los índices en una tabla son análogos a un catálogo en una biblioteca; si no se tiene un catálogo y hay que buscar un libro determinado en la Biblioteca Británica de Londres, con más de 150 millones de ejemplares, hay que buscar libro por libro y eso llevará un ratito :)

Sin embargo, con un catálogo, se busca el libro en el catálogo y se va directamente a la estanteria indicada.

Sin un índice, la base de datos tiene que buscar en todos y cada uno de los registros de la tabla (este proceso se llama escaneo de tabla). Si tenemos un índice, la base de datos recorre el índice, encuentra donde están los datos y los va a buscar. Esta hace que el proceso sea mucho más rápido.

Un índice guarda un puntero al registro de la tabla

¿Cómo hace para encontrar los otros valores que están en ese mismo registro? Los índices de la base de datos almacenan punteros a los registros correspondientes de la tabla. Un puntero es una referencia al espacio en la memoria del disco donde está guardado los datos de los registros correspondientes en la tabla.

En el índice, por tanto, se guarda el valor de la columna del índice así como un puntero al registro de la tabla donde están los demás valores de esa fila.

Imaginemos que nuestra tabla "books" que tenemos a continuación, tiene miles de registros y que queremos encontrar el autor del libro "Android in 3 days". Podemos crear un índice con la columna "title". Este índice será como este;

Index

Title Puntero
Android in 3 days puntero
Game development puntero
Java for beginners puntero
Spring puntero
Sql in 15 minutes puntero
Spring puntero
   

 

Uno de los valores del índice para un "title" podría ser algo como (“Android in 3 days”, 0×82829), donde 0×82829 es la dirección en el disco (puntero), donde esta la fila con los datos para “Android in 3 days”. Si no se tiene el puntero se tendría un único valor, lo que no tendría valor ya que no se podría encontrar el resto de los valores para ese registro- como el "autor" del libro.

SINTAXIS DE LA SENTENCIA SQL CREATE INDEX

La creación de un índice se hace a través de una sentencia CREATE INDEX, que te permite nombrar al índice, especificar la tabla y la columnas o columnas para indexar e indicar si queremos que el indice esté ordenado ascendentemente (ASC) o descendentemente (DESC).

Esto varía según la base de datos, en MySQL 5.0 estas palabras se permiten para extensiones futuras para especificar almacenamiento de índice ascendente o descendente. Actualmente se parsean pero se ignoran; los valores de índice siempre se almacenan en orden ascendente.

Si una columna se pide en orden descendente en una sentencia SELECT, el proceso será más rápido si esa columna tiene un índice creado, ordenado descendentemente.

El formato básico de la sentencia es la siguiente;

	CREATE INDEX <index_name>
ON <table_name> (<column_names>)

SQL CREATE UNIQUE INDEX

Los índices también pueden ser "únicos". Este tipo de índices previene de la entrada de valores duplicados en la columna o combinación de columnas en donde existe índice.

SINTAXIS DE LA SENTENCIA SQL CREATE UNIQUE INDEX

CREATE UNIQUE INDEX index_name
     ON table_name (column_name)

Se pueden crear índices en cualquier momento; no hay que hacerlo justo después de ejecutar la sentencia CREATE TABLE. También se puede crear índices en las tablas que ya tienen datos. Lo que no se puede hacer, es crear un índice único en una tabla que ya contiene valores duplicados. MySQL lo identifica y no crea el índice. El usuario tiene que eliminar primero los valores duplicados antes de crearlo.

La utilización de los índices tiene un coste asociado. Los índices utilizan un espacio en el disco y harán que las operaciones INSERT, UPDATE, y DELETE vayan más lentas, ya que cada vez que una de estas operaciones se lleva a cabo, se actualizan los índices así como la base de datos.

Nota: La sintaxis de la creación de los índices puede ser diferente según la base de datos. Por lo tanto hay que verificar la sintaxis según la que se esté usando.

ELIMINAR INDICES

La sentencia DROP INDEX se utiliza para eliminar los índices.

 DROP INDEX <index_name> ON <table_name>

 

<< Anterior Indice >>