HOWTO · MySQL

MySQL 재구축 인덱스

이 자습서는 MySQL에서 인덱스를 다시 빌드하는 방법을 보여줍니다.

이 페이지의 내용

이 자습서는 MySQL에서 인덱스를 다시 빌드하는 방법을 보여줍니다.

MySQL 재구축 색인

MySQL은 MySQL의 인덱스나 테이블이 변경될 수 있도록 데이터 유형과 문자를 처리합니다. 이것이 때때로 우리가 MySQL에서 인덱스를 재구축해야 하는 이유입니다.

인덱스를 재구축하는 몇 가지 방법이 있으며 그 중 일부는 전체 데이터베이스 또는 REINDEX만 인덱스를 재구축하는 데 사용할 수 있는 MySQL의 데이터 구조인 테이블을 복구하거나 재구축합니다.

REINDEX를 사용하여 하나 이상의 열에 대한 인덱스를 재구축하여 테이블 성능을 개선하고 데이터에 빠르게 액세스할 수 있습니다.

데이터베이스가 손상되었거나 복구가 필요할 때마다 REINDEX를 사용하여 인덱스를 재구축하거나 데이터베이스 또는 테이블을 복구해야 합니다.

PRIMARY KEY, UNIQUE, INDEX, FULLTEXT 및 REINDEX를 포함한 대부분의 MySQL 인덱스는 데이터를 저장하기 위한 자체 균형 데이터 구조 트리인 B-트리에 저장됩니다. 특별한 방식으로.

REINDEX를 사용하여 인덱스를 재구축하거나 데이터베이스 또는 테이블을 재구축하기 전에 먼저 테이블과 인덱스가 있는 데이터베이스를 생성해야 합니다. 이 자습서는 MySQL에서 인덱스를 다시 빌드하는 데 사용되는 다양한 방법을 보여줍니다.

테이블 및 인덱스 생성

이제 REINDEX를 사용하여 인덱스를 재구축하는 예제를 시도해 보겠습니다. 그러나 인덱스를 재구축하기 전에 먼저 인덱스를 만들어야 하므로 시작하겠습니다.

  1. 먼저 인덱스를 생성하는 구문은 다음과 같습니다.

    CREATE INDEX [IndexName] ON [TableName] ([ColumnName]);
    
  2. 이제 테이블을 만들어 봅시다

    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;
    

    위의 코드는 3개의 행과 3개의 열이 있는 테이블을 생성합니다. 출력을 참조하십시오.

    id	name	position
    1	Sheeraz	SeniorDeveloper
    2	John	SeniorDeveloper
    3	Jack	JuniorDeveloper
    
  3. position에는 SeniorDeveloper가 둘 이상 있습니다. 위치에 따라 데이터를 선택하고 설명할 수도 있습니다.

    예를 참조하십시오.

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

    첫 번째 쿼리는 위치가 SeniorDeveloper인 데이터를 선택하고 두 번째 쿼리는 MySQL이 이를 수행하는 방법을 설명합니다. 출력을 참조하십시오.

    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. 이제 보시다시피 테이블에 시니어 개발자가 한 명 이상 있으므로 해당 열에 대한 인덱스를 만든 다음 위의 쿼리를 설명하여 차이점을 확인합니다. 예를 참조하십시오.

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

    지금 인덱스를 생성한 후 explain 쿼리의 출력은 다음과 같습니다.

    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
    

    보시다시피 possible_keys 유형은 position 인덱스를 생성한 후 position으로 변경됩니다. 키도 할당됩니다. 다음 쿼리로 인덱스를 표시할 수도 있습니다.

    SHOW INDEXES FROM Employee;
    

    이 쿼리의 출력은 다음과 같습니다.

    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
    

REINDEX를 사용하여 INDEXES 재구축

이제 어떤 경우든 인덱스를 생성한 후 데이터베이스나 테이블이 손상되면 REINDEX를 사용하여 인덱스를 재구축할 수 있으므로 메모리를 줄이고 IO 효율성을 높이는 데 도움이 됩니다.

REINDEX의 구문은 다음과 같습니다.

# 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];

여기에서 REINDEX 또는 OPTIMIZE를 사용하여 손상된 인덱스를 재구축할 수 있습니다. 예를 참조하십시오.

REINDEX TABLE Employee(position);

SHOW INDEXES FROM Employee;

또는:

OPTIMIZE TABLE Employee;

SHOW INDEXES FROM Employee;

위의 두 쿼리 모두 테이블의 인덱스를 다시 빌드합니다.

출력:

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

REPAIR TABLE 방법을 사용하여 INDEXES 재구축

REINDEX 외에도 전체 테이블을 복구할 수 있으며 테이블의 인덱스도 다시 빌드합니다. 이를 수행하는 간단한 쿼리가 있습니다.

REPAIR TABLE Employee;

SHOW INDEXES FROM Employee;

위의 코드는 테이블을 복구하고 인덱스를 다시 빌드한 다음 인덱스 정보를 표시합니다. 출력을 참조하십시오.

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

InnoDB와 함께 ALTER TABLE 방법을 사용하여 INDEXES 재구축

또한 ALTER TABLE 쿼리를 사용하여 InnoDB 엔진을 사용하여 손상된 테이블과 인덱스를 재구축할 수 있습니다. 다음은 이를 수행하는 간단한 쿼리입니다.

ALTER TABLE Employee ENGINE = InnoDB;

SHOW INDEXES FROM Employee;

코드는 ALTER를 사용하여 InnoDB 엔진을 사용하여 테이블과 인덱스를 다시 빌드합니다.

출력:

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