ホームページ >バックエンド開発 >PHPチュートリアル >PHP 動的 Web サイトの高速化 MySQL インデックス分析と最適化について_PHP チュートリアル
この記事では主に、MySQL インデックス分析と動的 Web サイトの最適化を高速化する方法について説明します。
1. インデックスとは何ですか?
インデックスは、特定の値を持つレコードをすばやく検索するために使用されます。すべての MySQL インデックスは B ツリーの形式で保存されます。インデックスがない場合、クエリを実行するときに、MySQL は要件を満たすレコードが見つかるまで、テーブル全体のすべてのレコードを最初のレコードからスキャンする必要があります。テーブル内のレコードの数が増えるほど、この操作のコストも高くなります。検索条件として使用されるカラムにインデックスが作成されている場合、MySQL はレコードをスキャンすることなく、目的のレコードの位置を迅速に取得できます。テーブルに 1000 レコードがある場合、インデックスを使用してレコードを検索すると、レコードを順次スキャンするよりも少なくとも 100 倍高速になります。
people というテーブルを作成するとします。
CREATE TABLE people ( peopleid SMALLINT NOT NULL、
名前 CHAR(50) NOT NULL );
次に、1000 の異なる名前の値を people テーブルに完全にランダムに挿入します。データ ファイル内では、名前列には明示的な順序がありません。 name カラムにインデックスを作成すると、MySQL はインデックス内の name カラムをソートし、インデックス内の各項目に対して、データ ファイル内の実際のレコードの場所への「ポインタ」を内部的に保存します。したがって、名前が「Mike」に等しいレコードの peopleid を見つけたい場合 (SQL コマンドは「SELECT peopleid FROM people WHERE name='Mike';」)、MySQL は「Mike」の値を見つけることができます。 name のインデックスに直接移動します。データ ファイル内の対応する行は、その行の peopleid (999) を正確に返します。このプロセス中、MySQL は 1 行を処理するだけで結果を返します。 「name」列にインデックスがない場合、MySQL はデータ ファイル内のすべてのレコード、つまり 1,000 レコードをスキャンします。明らかに、MySQL が処理する必要があるレコードの数が少ないほど、タスクをより速く完了できます。2.インデックスの種類
MySQL は、選択できるさまざまなインデックス タイプを提供します:
通常のインデックス:
最も基本的なインデックスタイプであり、一意性などの制限はありません。通常のインデックスは次の方法で作成できます:
インデックスを作成します (例: CREATE INDEX ON tablename (列のリスト))。
ALTER TABLE tablename ADD INDEX [インデックス名] (列のリスト) などのテーブルを変更します。
CREATE TABLE tablename ([...], INDEX [インデックス名] (列のリスト)) のように、テーブルを作成するときにインデックスを指定します。一意のインデックス:
この種のインデックスは基本的に前の「通常のインデックス」と同じですが、違いが 1 つあります。インデックス列内のすべての値は 1 回だけ出現でき、一意である必要があります。一意のインデックスは次の方法で作成できます:
インデックスを作成します (例: CREATE UNIQUE INDEX ON tablename (列のリスト))。
ALTER TABLE tablename ADD UNIQUE [インデックス名] (列のリスト) などのテーブルを変更します。CREATE TABLE tablename ([...], UNIQUE [インデックス名] (列のリスト)) のように、テーブルを作成するときにインデックスを指定します。
主キー:主キーは一意のインデックスですが、「PRIMARY KEY」として指定する必要があります。 AUTO_INCREMENT 型の列を扱ったことがある場合は、主キーなどの概念にすでに精通しているかもしれません。主キーは通常、テーブルの作成時に「CREATE TABLE テーブル名 ([...], PRIMARY KEY (列のリスト));」のように指定します。ただし、「ALTER TABLE tablename ADD PRIMARY KEY (list of columns);」のようにテーブルを変更して主キーを追加することもできます。各テーブルは主キーを 1 つだけ持つことができます。
全文インデックス:
MySQL は、バージョン 3.23.23 以降、全文インデックス作成と全文検索をサポートします。 MySQL では、フルテキスト インデックスのインデックス タイプは FULLTEXT です。フルテキスト インデックスは、VARCHAR 型または TEXT 型の列に作成できます。これは、CREATE TABLE コマンド、または ALTER TABLE または CREATE INDEX コマンドによって作成できます。大規模なデータ セットの場合、ALTER TABLE (または CREATE INDEX) コマンドを使用してフルテキスト インデックスを作成する方が、フルテキスト インデックスを使用して空のテーブルにレコードを挿入するよりも高速です。
http://www.bkjia.com/PHPjc/364147.html
www.bkjia.com
true