MySQL単列索引と結合索引の違い紹介

4882 ワード

FROM:  http://database.ctocio.com.cn/353/11664853.shtml
MySQL単一列インデックスは、MySQLデータベースでよく見られるものです.MySQL単一列インデックスと結合インデックスの違いは、多くの人が十分に理解していないかもしれません.以下、両者の主要な違いを分析します.参考に勉強してください.
両方をイメージ的に比較するために、もう一つの表を作成します.
CREATE TABLE myIndex ( i_testID INT NOT NULL AUTO_INCREMENT, 
vc_Name VARCHAR(50) NOT NULL, 
vc_City VARCHAR(50) NOT NULL, i_Age INT NOT NULL, i_SchoolID INT NOT NULL, 
PRIMARY KEY (i_testID) );
この10000本の記録には7、8の上下に5本のvc_が分布しています.Name=「erquan」の記録は、city、age、schoolの組み合わせだけがそれぞれ異なる.
このT-SQLを見てください.
 
SELECT i_testID FROM myIndex WHERE vc_Name='erquan' AND vc_City='  ' AND i_Age=25;
まず、MySQLの単一列インデックスを構築することを考えます.
vc_にいますName列にインデックスを作成しました.T-SQLを実行すると、MYSQLはすばやくターゲットをvc_にロックしました.Name=erquanの5つの記録から取り出し、中間結果集に置く.この結果集の中で、まずvc_を排除します.Cityは「鄭州」の記録に等しくないので、i_を排除します.Ageは25に等しくない記録で、最後に唯一の条件に合致した記録を選別します.
 
vc_にいますがNameでインデックスを作成しました.検索時にMYSQLは表をスキャンする必要がなく、効率が向上しました.しかし、私たちの要求からまだ距離があります.同じ、vc_でCityとi_Ageがそれぞれ確立したMySQL単一列インデックスの効率は似ている.
MySQLの効率をさらに搾取するためには、結合インデックスの構築が考えられます.vc_をName,vc_CityAgeはインデックス内に構築されました.
 
ALTER TABLE myIndex ADD INDEX name_city_age (vc_Name(10),vc_City,i_Age);
表を作る時、vc_Nameの長さは50です.ここではなぜ10を使いますか?一般的に名前の長さが10を超えないため、インデックスの検索速度が速くなり、インデックスファイルのサイズが減り、INSERTの更新速度がアップします.
T-SQLを実行すると、MySQLは記録をスキャンする必要がなく、一意の記録を見つけることができる.
 
きっとある人が聞きます.それぞれvc_にいたら.Name,vc_CityAge上に単一列索引を作成して、この表に単一列索引を3つ持たせます.照会時と上記の組み合わせ索引の効率は同じですか?大きく違っています.私たちの組み合わせの索引よりはるかに低いです.この時は三つのインデックスがありますが、MySQLはその中でしか使えません.一番効率的な単一列インデックスのようです.
このような組み合わせインデックスを作るということは、それぞれが確立したということに相当します.
 
vc_Name,vc_City,i_Age vc_Name,vc_City vc_Name
このような3つの組み合わせインデックス!どうしてvc_がないですかCityAgeなどの組み合わせインデックスは?これはmysql結合索引「最左プレフィックス」の結果である.簡単に理解すると、一番左だけの組み合わせです.この3列のクエリーを含めると、この組み合わせインデックスが使用されるわけではなく、以下のいくつかのT-SQLが使用されます.
SELECT * FROM myIndex WHREE vc_Name="erquan" AND vc_City="  "
SELECT * FROM myIndex WHREE vc_Name="erquan"
次のいくつかは使えません.
SELECT * FROM myIndex WHREE i_Age=20 AND vc_City="  " 
SELECT * FROM myIndex WHREE vc_City="  "