HOWTO · MySQL
MySQL 재구축 인덱스
이 자습서는 MySQL에서 인덱스를 다시 빌드하는 방법을 보여줍니다.
이 페이지의 내용
이 자습서는 MySQL에서 인덱스를 다시 빌드하는 방법을 보여줍니다.
MySQL 재구축 색인
MySQL은 MySQL의 인덱스나 테이블이 변경될 수 있도록 데이터 유형과 문자를 처리합니다. 이것이 때때로 우리가 MySQL에서 인덱스를 재구축해야 하는 이유입니다.
인덱스를 재구축하는 몇 가지 방법이 있으며 그 중 일부는 전체 데이터베이스 또는 REINDEX만 인덱스를 재구축하는 데 사용할 수 있는 MySQL의 데이터 구조인 테이블을 복구하거나 재구축합니다.
REINDEX를 사용하여 하나 이상의 열에 대한 인덱스를 재구축하여 테이블 성능을 개선하고 데이터에 빠르게 액세스할 수 있습니다.
데이터베이스가 손상되었거나 복구가 필요할 때마다 REINDEX를 사용하여 인덱스를 재구축하거나 데이터베이스 또는 테이블을 복구해야 합니다.
PRIMARY KEY, UNIQUE, INDEX, FULLTEXT 및 REINDEX를 포함한 대부분의 MySQL 인덱스는 데이터를 저장하기 위한 자체 균형 데이터 구조 트리인 B-트리에 저장됩니다. 특별한 방식으로.
REINDEX를 사용하여 인덱스를 재구축하거나 데이터베이스 또는 테이블을 재구축하기 전에 먼저 테이블과 인덱스가 있는 데이터베이스를 생성해야 합니다. 이 자습서는 MySQL에서 인덱스를 다시 빌드하는 데 사용되는 다양한 방법을 보여줍니다.
테이블 및 인덱스 생성
이제 REINDEX를 사용하여 인덱스를 재구축하는 예제를 시도해 보겠습니다. 그러나 인덱스를 재구축하기 전에 먼저 인덱스를 만들어야 하므로 시작하겠습니다.
-
먼저 인덱스를 생성하는 구문은 다음과 같습니다.
CREATE INDEX [IndexName] ON [TableName] ([ColumnName]); -
이제 테이블을 만들어 봅시다
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 -
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 -
이제 보시다시피 테이블에 시니어 개발자가 한 명 이상 있으므로 해당 열에 대한 인덱스를 만든 다음 위의 쿼리를 설명하여 차이점을 확인합니다. 예를 참조하십시오.
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