Índice de reconstrucción de MySQL

Sheeraz Gul 20 junio 2023
  1. Índice de reconstrucción de MySQL
  2. Reconstruir ÍNDICE usando REINDEX
  3. Reconstruir ÍNDICE utilizando el método TABLA DE REPARACIÓN
  4. Reconstruir ÍNDICE utilizando el método ALTER TABLE con InnoDB
Índice de reconstrucción de MySQL

Este tutorial demuestra cómo reconstruir índices en MySQL.

Índice de reconstrucción de MySQL

MySQL maneja tipos de datos y caracteres para que pueda haber un cambio en los índices o tablas de MySQL. Es por eso que a veces necesitamos reconstruir los índices en MySQL.

Existen algunos métodos para reconstruir los índices, y algunos de ellos repararán o reconstruirán toda la base de datos o la tabla donde solo REINDEX es una estructura de datos en MySQL que se puede usar para reconstruir solo los índices.

Podemos usar el REINDEX para reconstruir los índices para una o varias columnas, haciendo que la tabla funcione mejor y accediendo a los datos rápidamente.

Cada vez que una base de datos esté dañada o necesite una reparación, será necesario utilizar REINDEX para reconstruir los índices o reparar la base de datos o la tabla.

La mayoría de los índices de MySQL, incluidos PRIMARY KEY, UNIQUE, INDEX, FULLTEXT y REINDEX, se almacenan en los árboles B, que son árboles de estructura de datos autoequilibrados para almacenar los datos. de una manera particular.

Antes de reconstruir los índices usando el REINDEX o reconstruir las bases de datos o tablas, primero necesitamos crear una base de datos con tablas e índices. Este tutorial demuestra diferentes métodos utilizados para reconstruir los índices en MySQL.

Crear tabla e índices

Ahora probemos un ejemplo para reconstruir los índices usando REINDEX, pero antes de reconstruir el índice, primero tenemos que crear los índices, así que comencemos con eso.

  1. Primero, la sintaxis para crear índices es:

    CREATE INDEX [IndexName] ON [TableName] ([ColumnName]);
    
  2. Ahora, creemos una tabla

    create table Employee(id integer, name varchar(100), position varchar(100));
    insert into Employee(id, name, position) values(1, "Sheeraz", "SeniorDeveloper");
    insert into Employee(id, name, position) values(2, "John", "SeniorDeveloper");
    insert into Employee(id, name, position) values(3, "Jack", "JuniorDeveloper");
    select * from Employee;
    

    El código anterior creará una tabla con tres filas y tres columnas. Ver la salida:

    id	name	position
    1	Sheeraz	SeniorDeveloper
    2	John	SeniorDeveloper
    3	Jack	JuniorDeveloper
    
  3. Para cargo, hay más de un SeniorDeveloper. Podemos seleccionar los datos según la posición y también explicar eso.

    Ver el ejemplo:

    SELECT id, name FROM Employee WHERE Position= "SeniorDeveloper";
    
    EXPLAIN SELECT id, name FROM Employee WHERE Position= "SeniorDeveloper";
    

    La primera consulta seleccionará los datos donde la posición es SeniorDeveloper, y la segunda explicará cómo MySQL realiza eso. Ver la salida:

    id	name
    1	Sheeraz
    2	John
    
    id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
    1	SIMPLE	Employee	NULL	ALL	NULL	NULL	NULL	NULL	3	33.33	Using where
    
  4. Ahora, como podemos ver, hay más de un desarrollador senior en la tabla, por lo que creamos un índice para esa columna y luego explicamos la consulta anterior para ver la diferencia. Ver el ejemplo:

    CREATE INDEX position ON Employee(Position);
    
    EXPLAIN SELECT id, name FROM Employee WHERE Position= "SeniorDeveloper";
    

    Después de crear el índice ahora, el resultado de la consulta explicar es:

    id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
    1	SIMPLE	Employee	NULL	ref	position	position	403	const	1	100.00	NULL
    

    Como podemos ver, el tipo, possible_keys, se cambia a la posición después de crear el índice posición; también se le asigna una clave. También podemos mostrar los índices mediante la siguiente consulta:

    SHOW INDEXES FROM Employee;
    

    El resultado de esta consulta es:

    Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_comment	Visible	Expression
    Employee	1	position	1	position	A	NULL	NULL	NULL	YES	BTREE			YES	NULL
    

Reconstruir ÍNDICE usando REINDEX

Ahora bien, si en cualquier caso, después de crear los índices, la base de datos o las tablas están corruptas, podemos reconstruir los índices utilizando el REINDEX, que nos ayudará a reducir la memoria y aumentar la eficiencia de IO.

Las sintaxis para el REINDEX son:

# To REINDEX the whole database
REINDEX DATABASE [DatabaseName];
# To REINDEX the Table
REINDEX TABLE [TableName];
# To REINDEX the Particular column
REINDEX TABLE [TableName]([ColumnName);
# To REINDEX the INDEX
REINDEX INDEX [Index_Name];

Aquí, podemos usar REINDEX u OPTIMIZE para reconstruir los índices dañados. Ver el ejemplo:

REINDEX TABLE Employee(position);

SHOW INDEXES FROM Employee;

O:

OPTIMIZE TABLE Employee;

SHOW INDEXES FROM Employee;

Las dos consultas anteriores reconstruirán los índices de la tabla.

Producción :

Table	Op	Msg_type	Msg_text
test.Employee	optimize	status	OK
Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_comment	Visible	Expression
Employee	1	position	1	position	A	1	NULL	NULL	YES	BTREE			YES	NULL

Reconstruir ÍNDICE utilizando el método TABLA DE REPARACIÓN

Además de REINDEX, también podemos reparar toda la tabla, lo que también reconstruirá los índices de la tabla. Hay una consulta simple para realizar eso.

REPAIR TABLE Employee;

SHOW INDEXES FROM Employee;

El código anterior reparará la tabla, reconstruirá los índices y luego mostrará la información de los índices. Ver la salida:

Table	Op	Msg_type	Msg_text
test.Employee	repair	status	OK
Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_comment	Visible	Expression
Employee	1	position	1	position	A	1	NULL	NULL	YES	BTREE			YES	NULL

Reconstruir ÍNDICE utilizando el método ALTER TABLE con InnoDB

También podemos usar la consulta ALTER TABLE para reconstruir la tabla y los índices corruptos usando el motor InnoDB. Aquí está la consulta simple para realizar eso.

ALTER TABLE Employee ENGINE = InnoDB;

SHOW INDEXES FROM Employee;

El código usará ALTER para reconstruir la tabla y los índices usando el motor InnoDB.

Producción :

Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment	Index_comment	Visible	Expression
Employee	1	position	1	position	A	2	NULL	NULL	YES	BTREE			YES	NULL
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

Artículo relacionado - MySQL Index