Documente Academic
Documente Profesional
Documente Cultură
ÍNDICE EN MYSQL
• Estructura de datos (fichero) que aceleran el acceso a los registros en las tablas de nuestra
BBDD. Un índice contiene el valor de una fila y su dirección física en disco.
• Se sacrifica espacio de disco a cambio de ahorro de procesamiento en la CPU.
• Los índices se crean sobre los campos en los que se realizan búsquedas más frecuentes,
(sobre campos clave, parte de clave o secundaria, sobre los que se hacen más consultas).
• En una consulta MySQL se leen todos los registros de la tabla (ineficiente con miles)
• Si ordenamos los registros por el código de cuenta, solo hay que localizar el número y
capturar los datos mediante un índice (análogo a un índice de un libro).
• Los índices se crean sobre los campos más utilizados en las consultas.
• Más información:
• https://dev.mysql.com/doc/refman/5.7/en/optimization-indexes.html
1.1. TIPOS DE ÍNDICES
• Parciales: Se hace un índice parcial, en lugar de indexar todo el contenido de un campo de la BD
ALTER TABLE nombreTabla ADD INDEX (columna(120));
• Multicolumna: Son índices definidos sobre más de una columna. También se pueden realizar hacer
índices multicolumna parciales
ALTER TABLE nombreTabla ADD INDEX (col1(120), clo2);
• Secundarios/Cluster:
• Las tablas innoDB usan índices cluster, en el índice asociado a su clave primaria, los datos se guardan
ordenados por clave primaria (el índice incrustado en los datos).
• Las tablas MyISAM los índices se guardan en un área distinta de los datos. La búsqueda por índice
requiere 2 operaciones (leer el índice y leer los datos), con índices incrustados estas búsquedas se
resuelven en 1 sola operación. Una vez localizada la entrada del índice, ya se han localizado los datos.
• Hay que tener cuidado en el uso de índices clúster
– Usar varios índices secundarios con una clave 1ª grande: habrá una copia para cada índice
secundario.
– En operaciones de modificación de claves primarias: reorganizar el tablespace (lugar donde se
guardan los datos para reubicar el nuevo registro) y actualizar los índices secundarios sobre ese
registro.
1.2. ESTRUCTURA DE UN ÍNDICE
• B-tree o árbol b: Índice con estructura de árbol. El árbol está formado por un conjunto de
nodos, cada nodo con valores de índice ordenados que apuntan a registros en disco.
• Al tener un nº variable de nodos hijo dentro de un rango predefinido, al insertar o eliminar en
la estructura la cantidad de nodos hijos varia en esa estructura. Para mantener el nº de
nodos dentro de un rango, los nodos internos se unen o parten.
• Hash: Se basa en una función que hace corresponder una clave con valores numericos de
manera que se pueda asociar a cada valor de clave un número que permita localizar el
registro correspondiente. Este número debe limitarse al máximo tamaño de almacenamiento
1.3. ÍNDICES en MySQL
• Al crear índices, junto con el tipo, se puede indicar la estructura del índice (btree o hash). Hay
varios tipos según el tipo de datos y si los campos forman o no una clave
• Son distintos para cada motor de almacenamiento: InnoDB solo soporta BTREE, MyISAM
admite índices tipo BTREE y RTREE (para tipos de datos espaciales)
• Tipos de índices:
Descripción:
• UNIQUE | FULLTEXT | SPATIAL: Es el tipo de índice.
• index_name: nombre del índice.
• index_type: USING (BTREE | HASH) # Puede ser de tipo btree o hash
• index_col_name: col_name [(length)] [ASC | DESC] # nombre columna sobre la
que se crea el índice, tamaño y orden en el que se almacena.
MOSTRAR ÍNDICES
• Mostrar los índices (SHOW INDEX):