MySQLのインデックスチューニング単一のテーブル2つのテーブル、3つのテーブルの練習

 

シングルテーブル

新しい表

NOTは、物品(存在する場合CREATE TABLEを
識別INT(10)UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENTを、
INT(10)UNSIGNED NOT NULL、AUTHOR_ID 
CATEGORY_IDのINT(10)UNSIGNED NOT NULLは、
INT(10)UNSIGNED NOT NULLは、ビュー
10(INTコメント)UNSIGNED NOT NULL、
表題INT(10)UNSIGNED NOT NULL、
コンテンツTEXT NOT NULL 
)。

 

挿入データ

INSERT INTO記事(AUTHOR_ID、CATEGORY_ID、ビュー、コメント、タイトル、コンテンツ)VALUES 
(1,1,1,1、 '1'、 '1')、
(2,2,2,2、 '2'、 '2 ')、
(1,1,3,3、' 3' 、 '3')。

 

検索します 

クエリCATEGORY_IDケース1は、1より大きいとコメントは、ほとんどのarticle_idを表示します。

IDを選択し、CATEGORY_ID = 1とコメント> 1 ORDER BYがDESC LIMIT 1を見た物品からAUTHOR_ID。

  

使用して、実行計画を表示するEXPLAIN

SELECT ID、物品からAUTHOR_IDをEXPLAIN WHERE CATEGORY_ID = 1とコメント> 1つのORDER BYビューDESC LIMIT 1。

結論:タイプはALLで、すべてのクエリは、その最悪のシナリオ、状況の最悪filesortレコード使用して余分な情報、最適化する必要があるとして表示されます。

 

スタート最適化

最初の最適化は
インデックスを参照してください。

記事からインデックスを示し;

この時点では、インデックスによって最適化されたが、私たちが最も適切である列に索引付けするかわからない、試してみる必要があります。

CATEGORY_ID、コメント、意見:私たちは、最初の3つのフィールドに、関節のインデックスを作成します。

作成し、インデックスを削除します。

記事(CATEGORY_ID、コメント、ビュー)のインデックスide_article_ccvを作成します。
DROP INDEX記事ON ide_article_ccv。

結論:
タイプのを許容できる範囲、となりますが、まだ使用中filesortレコードを使用して余分は受け入れられません。
なぜ我々は、インデックスを確立したが無駄にできますか?
これは、原則としてBツリーインデックスに従った
ソートCATEGORY_IDに
あなたはビューを並べ替え、同じコメントが発生した場合、同じ種類のコメントが、再びCATEGORY_ID発生した場合は
、コメント欄には、再び、中間位置でのジョイントをフィールドするとき
、コメントが> 1つの条件ので、 (レンジと呼ばれる)の値の範囲
MySQLは再び後の検索の断面図をインデックスを使用しない、すなわち、クエリフィールドインデックスの後者のタイプは無効範囲です。

 

第二次优化:
create index ide_article_cv on article(category_id,views);

结论:type变成ref,Extra中的Using filesort也消失了,结果很理想。

 

 

保持更新中。。。

おすすめ

転載: www.cnblogs.com/-wenli/p/12182477.html