この記事では主に、MySQL インデックス分析と動的 Web サイトの最適化を高速化する方法について説明します。 iSH China チュートリアル オンライン
1. インデックスとは何ですか? iSH China チュートリアル オンライン
インデックスは、特定の値を持つレコードをすばやく検索するために使用されます。すべての MySQL インデックスは B ツリーの形式で保存されます。インデックスがない場合、クエリを実行するときに、MySQL は要件を満たすレコードが見つかるまで、テーブル全体のすべてのレコードを最初のレコードからスキャンする必要があります。テーブル内のレコードの数が増えるほど、この操作のコストも高くなります。検索条件として使用されるカラムにインデックスが作成されている場合、MySQL はレコードをスキャンすることなく、目的のレコードの位置を迅速に取得できます。テーブルに 1000 レコードがある場合、インデックスを使用してレコードを検索すると、レコードを順次スキャンするよりも少なくとも 100 倍高速になります。
iSH 中国語チュートリアル オンライン people という名前のテーブルを作成するとします。 iSH 中国語チュートリアル オンライン
CREATE
TABLE people ( peopleid SMALLINT NOT NULL, iSH 中国語チュートリアル オンライン
name 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 が処理する必要があるレコードの数が少ないほど、タスクをより速く完了できます。 iSH 中国語チュートリアル オンライン
2. インデックス タイプ iSH 中国語チュートリアル オンライン
MySQL では、さまざまなインデックス タイプから選択できます: iSH 中国語チュートリアル オンライン
通常のインデックス: iSH 中国語チュートリアル オンライン
これは最も基本的なインデックス タイプであり、一意性などの制限はありません。 。通常のインデックスは次の方法で作成できます。 iSH 中国語チュートリアル オンラインでは
インデックスを作成します (例: CREATE INDEX <インデックス名> ON tablename (列のリスト))。 iSH 中国語チュートリアル オンラインでは
テーブルを変更します (例: ALTER TABLE tablename ADD)。 INDEX [インデックス名] ] (列のリスト); iSH 中国語チュートリアル オンライン
CREATE TABLE tablename ([...], INDEX [インデックス名] (列のリスト)); のように、テーブルを作成するときにインデックスを指定します。中国語チュートリアル オンラインの
ユニークなインデックス: iSH 中国語チュートリアル オンライン
この種のインデックスは、基本的に前の「通常のインデックス」と同じですが、1 つ違いがあります。インデックス列内のすべての値は 1 回だけ出現できます。ユニークであること。一意のインデックスは次の方法で作成できます。 iSH 中国語チュートリアル オンラインで
インデックスを作成 (CREATE UNIQUE INDEX <インデックス名> ON tablename (列のリスト) など) iSH 中国語チュートリアル オンラインで
テーブルを変更 (ALTER TABLE tablename ADD UNIQUE [index)] name] (列のリスト); iSH 中国語チュートリアル オンライン
テーブルを作成するときにインデックスを指定します (例: CREATE TABLE tablename ([...], UNIQUE [インデックス名] (列のリスト));
主キー: iSH 中国語チュートリアル オンライン
主キーは一意のインデックスですが、「PRIMARY KEY」として指定する必要があります。 AUTO_INCREMENT 型の列を使用したことがある場合は、主キーなどの概念にすでに精通しているかもしれません。主キーは通常、テーブルの作成時に「CREATE TABLE テーブル名 ([...], PRIMARY KEY (列のリスト));」のように指定します。ただし、「ALTER TABLE tablename ADD PRIMARY KEY (list of columns);」のようにテーブルを変更して主キーを追加することもできます。各テーブルは主キーを 1 つだけ持つことができます。 iSH 中国語チュートリアル オンライン
全文インデックス: iSH 中国語チュートリアル オンライン
MySQL は、バージョン 3.23.23 以降、全文インデックス作成と全文検索をサポートします。 MySQL では、フルテキスト インデックスのインデックス タイプは FULLTEXT です。フルテキスト インデックスは、VARCHAR 型または TEXT 型の列に作成できます。これは、CREATE TABLE コマンド、または ALTER TABLE または CREATE INDEX コマンドによって作成できます。大規模なデータ セットの場合、ALTER TABLE (または CREATE INDEX) コマンドを使用してフルテキスト インデックスを作成する方が、フルテキスト インデックスを使用して空のテーブルにレコードを挿入するよりも高速です。