HOWTO · MySQL

MySQL 再構築インデックス

このチュートリアルでは、MySQL でインデックスを再構築する方法を示します。

このページの内容

このチュートリアルでは、MySQL でインデックスを再構築する方法を示します。

MySQL 再構築インデックス

MySQL は、MySQL のインデックスまたはテーブルを変更できるように、データ型と文字を処理します。 そのため、MySQL でインデックスを再構築する必要がある場合があります。

インデックスを再構築するにはいくつかの方法があり、そのうちのいくつかはデータベース全体またはテーブルを修復または再構築します。この場合、REINDEX のみが MySQL のデータ構造であり、インデックスのみを再構築するために使用できます。

REINDEX を使用して、1つまたは複数の列のインデックスを再構築し、テーブルのパフォーマンスを向上させ、データにすばやくアクセスできます。

データベースが破損したり、修復が必要な場合はいつでも、REINDEX を使用してインデックスを再構築するか、データベースまたはテーブルを修復する必要があります。

PRIMARY KEYUNIQUEINDEXFULLTEXT & 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. ポジション には、複数の SeniorDeveloper があります。 位置に応じてデータを選択し、それについて説明することもできます。

    例を参照してください。

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

    最初のクエリは位置が SeniorDeveloper であるデータを選択し、2 番目のクエリは 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
    

    ご覧のとおり、インデックス position を作成した後、型 possible_keysposition に変更されます。 キーも割り当てられます。 次のクエリでインデックスを表示することもできます。

    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

InnoDBALTER 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