06 MySQLのインデックス

01-インデックス

1 、インデックスはソートの1つ以上の列のデータベーステーブル値のデータ構造であり、インデックスは、検索データベースの特定のデータを高速化することができます。

図2は、インデックスは、単一のデータベース構造は、データテーブルの参照ポインタのすべてのレコードを含む、ディスク上に格納されています。

3 、すべてのMySQLカラムタイプは、関連する列のインデックスを使用して索引付けすることができ、特定の値を有する素早く特定の行または複数の列を見つけるためにインデックスを使用すると、クエリ速度を改善するための最良の方法です。

図4に示すように、インデックスは、ストレージエンジンに実装されています。したがって、各ストレージエンジンのインデックスは必ずしも同一ではなく、各ストレージエンジンは、必ずしもすべてのインデックス・タイプをサポートしていません。
テーブルインデックス及びストレージエンジンに応じて定義された最大長さ当たりのインデックスの最大数。すべてのストレージエンジンは、少なくとも16の各テーブルインデックス、256バイトインデックスの少なくとも全長を支持します。

5 、蓄積型2 MySQLのインデックス:BTREEとHASH、特定及び関連するテーブル格納されているエンジン、

 6、MyISAMテーブルとInnoDBストレージエンジン支持BTREEインデックスと、メモリ/。HEAYストレージエンジンがサポートできるとBTREEハッシュインデックス。

7 、インデックスの利点: 1 )一意のインデックスを作成することは、データベーステーブルのデータの各行の一意性を保証することができます。 2 )非常にインデックスが作成された主な理由である、クエリデータを高速化することができます。 3 )基準におけるデータ整合性のためのテーブルとテーブルの間の接続を促進することができます。 4句クエリをグループ化し、並べ替えたデータを使用する場合)、クエリが大幅時間グルーピングに減少し、ソートすることができます。

8 次のように、インデックスは欠点が増加している: 1 )インデックスindexを作成し、維持時間がかかり、データ量の増加と、それにかかる時間を増加させるであろう。 2 )インデックスは、データ・テーブル・データ・ファイル・スペースステーションに加えて、ディスク・スペースを占有する必要があり、各インデックスは、インデックスの数が多い場合には、インデックスファイルが高速データファイルよりもファイルサイズの上限に達することができる、特定の物理的空間を占めます。 3)テーブルのデータが、削除、追加および変更する、インデックスが動的従ってメンテナンス速度データを低減、維持されるべきです。

 分類02-インデックス

MySQLのインデックスは、約いくつかのカテゴリに分けることができる:
 1 常インデックスとユニークインデックス、
一般的な指標は、MySQLインデックス型で実質的に、列定義インデックスに繰り返し挿入し、null値を許容します。
ユニークなインデックス値は、索引列は一意であるが、自由な値を許可する必要があります。それは、インデックスの組み合わせであれば、列の値は一意である必要があります。
主キーのインデックスはNULLを許可しない、特別な一意のインデックスです。

2 、別のインデックスと組み合わせ指数
インデックスは、単一の列を含む、すなわち別のインデックスは、テーブルは、複数の個別のインデックスを持つことができます。
複合インデックスは、複数のフィールドの組み合わせテーブルの上に作成されたインデックスを参照し、唯一のクエリ条件でこれらのフィールドの左側を使用し、インデックスが使用されます。最も左のプレフィックスの収集以下、複合インデックスを使用している場合。

3 、フルテキストインデックス
列インデックス付け重複値とNULL値を挿入することができる支柱値で定義されたテキストFULLTEXTインデックス型、テキスト検索インデックス。フルテキストインデックスは、CHAR、VARCHAR、TEXT型の列に作成することができます。唯一のMySQLのMyISAMストレージエンジンは、フルテキストインデックスをサポートしています。

図4に示すように、空間インデックス
GEOMETRY、POINT、LINESTRING及びPOLYGON:空間インデックスはMySQLで空間データ型は、4つの種類、すなわち、があり、空間データフィールドインデックスのタイプに基づいています。
MySQLは、空間インデックスを作成するために、通常の索引に似た構文を作成することが可能となる、空間キーワード展開を使用しています。
空間インデックスの列を作成し、それはNOT NULLとして宣言する必要があり、空間インデックスのみのMyISAMストレージエンジンのテーブルが作成されました。

設計原理03-インデックス

インデックスを設計する際、基準を考慮すべきである: 1 )インデックスが占有回スペースをステッピングするだけでなく、INSERT、DELETE、UPDATEおよびその他のステートメントのパフォーマンスに影響を与える、なぜならによりああ、あれば、インデックステーブルの数が多いことはできませんデータテーブルの両方が変化した場合、インデックスが調整され、更新されます。 2 )過度の頻繁に更新されるテーブルインデックス、およびインデックス列最小化を回避します。フィールドは、多くの場合、インデックスを作成する必要があるクエリが、不必要なフィールドを追加することを避けるために使用されますが。 3 少量)データテーブルより少ないデータによる、インデックスを使用することが最善ではありません、時間クエリが法案には、インデックスをトラバースするよりも、短くてもよく、インデックスが最適なパフォーマンスが得られないことがあります。 4 )複数の異なる値にインデックスを作成するにはいくつかの列の異なる値に頻繁に使用される条件式ではなく、インデックスに列挙されています。 5 )プロパティは、特定のデータ自体のユニークな特徴は、一意のインデックスを指定します。ユニークなインデックスが検索を高速化するために、定義されたデータ列の整合性を確保できるようにする必要があります使用します。カラムは複数のソートする場合は列インデックスで6)は、ソートやグループ化頻繁にこれらの列に複合インデックスを作成することができます。

インデックスを作成するには、04-

インデックスを作成するときにテーブルを作成します。

1、インデックスを作成するテーブルを作成する際に
、同時に制約の定義にかかわらず、作成種類制約のものの、主キー、外部キー制約またはユニーク制約をデータ型の列を定義するだけで、CREATE TABLEを使用してテーブルの作成をするだけでなく、定義指定された列に索引を作成することと同じ。
次のように基本的な構文テーブルを作成するときに、インデックスを作成すると、次のとおりです。
表table_name [COL_NAME DATA_TYPE] [UNIQUE CREATE | FULLTEXT | SPATIAL] [INDEX | KEY] [INDEX_NAME](COL_NAME [長さ])[ASC | DESC] 

定義:
UNIQUE、FULLTEXTを;空間は一意のインデックス、フルテキストインデックス、空間インデックス表現
を指定するためのインデックスを作成し、キーインデックスの効果の両方について同じと、
COL_NAMEフィールドはインデックス列を作成するために、列が選択されたデータテーブルから複数の列を定義する必要があります; 
インデックスCOL_NAMEのデフォルト値は、指定されたインデックス、オプションのパラメータのindex_nameの名前。
、指定されたインデックスに文字列型の長さのみをインデックスの長さを示すパラメータオプションの長さ。

2は、通常のインデックスを作成する
最も基本的なインデックス・タイプを、そこには限度一意ではありませんし、データへのアクセスを高速化するためにのみ機能している、などです。
例:
TABLEブック(CREATE 
    BookID INT NOT NULL、
    bookname VARCHAR( 255)NOT NULL、
    情報VARCHAR( 255 )NULL、
    year_publicationのYEAR NOT NULL、
    INDEX(year_publication)
); 

3、作成一意のインデックス
一意のインデックスを作成することが主な要因は、特に比較的大きいため、クエリ実行時間インデックス列の操作を軽減することですデータテーブル。索引列の値は一意であるが、自由な値を許可する必要があります。それは、インデックスの組み合わせであれば、列の値は一意である必要があります。
例:
CREATE TABLE T1(
    ID INT NOT NULL、
    名前VARCHAR( 255 )NOT NULL、
    UNIQUE INDEX UniqIdx(ID)
); 

4、個別のインデックス作成。
別インデックスはフィールドインデックスのデータテーブルに作成され、Aあなたは別のインデックスに複数のテーブルを作成することができます。上記の2つの例は、個別のインデックスです。

複合インデックス作成5、
複合インデックスは、複数のフィールドにインデックスを作成することです。
例:
CREATE TABLE T2(
    ID INT NOT NULL、
    名前のCHAR( 20)NOT NULL、
    INT NOT NULL年齢、
    INDEX MulaiIdx(上記ID上記、名前)
); 

6、フルテキストインデックスを作成するために
インデックスを作成するためのFULLTEXT全文検索のために使用することができる、唯一のMyISAMストレージエンジンのサポート、そして唯一のCHAR、VARCHAR、TEXTカラムを。
インデックスは、列全体のために、部分的(接頭辞)インデックスをサポートしていません常にあります。
例:
CREATE TABLE T3(
    ID INT NOT NULL、
    名前のCHAR( 20は)NOT NULL、
    年齢INT NOT NULL、
    情報VARCHAR( 255 )、
    FULLTEXT INDEX FullTextIdx(情報)
)ENGINE = MyISAMテーブル; 

7、空間インデックスの作成。
空間インデックス必見のMyISAMテーブルタイプで作成され、フィールドのスペースの種類は非空である必要があります。
例:
CREATE TABLE T4(
    ID NOT NULL INT、
    G GEOMETRY NOT NULL、
    空間インデックスspatIdx(G)
)エンジン =のMyISAM; 
注:作成したときにフィールド値が非ヌル空間の制約タイプを指定し、テーブルストレージエンジンはMyISAMテーブルです。

既に存在するテーブルにインデックスを作成します。

1、ALTER TABLE文の使用して索引を作成し
、以下のように基本的な構文は次のとおりです。
ALTER TABLEはADD TABLE_NAME [UNIQUEを | FULLTEXTは| SPATIAL] [INDEX | KEY] [INDEX_NAME](COL_NAME [長さ]、...)[ASC | DESC] 
ビューのテーブルインデックス:
表示インデックスから予約\ G; 

例:
ALTER TABLEブックインデックスBkNameIdx ADD(bookname( 30 )); 

2、インデックス作成使用して索引を作成するために
既に存在しているテーブルにインデックスを追加することができます。
基本的な文法構造:
CREATE [UNIQUE | FULLTEXT | SPATIAL] table_nameのON INDEX index_nameは(COL_NAME [長さ]、...)[ASC | DESC]

05-削除インデックス

1、ALETR TABLEは、基本的な構文のインデックスを削除し、次の通りである:
ALTER TABLE table_nameのDROP INDEX index_nameはを; 
注:唯一の制約インデックスAUTO_INCREMENTフィールドを削除することはできません。

2、インデックス削除するにはDROP INDEX文を使用し
table_nameのON DROP INDEX index_nameはを; 

注:インデックスの不可欠な部分として削除したい場合は、テーブル内の削除の列、列がインデックスから削除されます。すべての列のインデックスの構成が削除されている場合は、インデックス全体が削除されます。

 

おすすめ

転載: www.cnblogs.com/pgxpython/p/11725709.html