MySQL 재구축 인덱스

Sheeraz Gul 2023년6월20일
  1. MySQL 재구축 색인
  2. REINDEX를 사용하여 INDEXES 재구축
  3. REPAIR TABLE 방법을 사용하여 INDEXES 재구축
  4. InnoDB와 함께 ALTER TABLE 방법을 사용하여 INDEXES 재구축
MySQL 재구축 인덱스

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

MySQL 재구축 색인

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

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

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

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

PRIMARY KEY, UNIQUE, INDEX, FULLTEXTREINDEX를 포함한 대부분의 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
작가: Sheeraz Gul
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

관련 문장 - MySQL Index