2016-11-28 10 views
0

私は以下のクエリを持っています。私はインデックスを使用してmySqlクエリのパフォーマンスを最適化

Explain 
SELECT 
    a.ProductID, 
    a.ProductName, 
    b.ShelfID, 
    b.SCode, 
    c.CompanyID, 
    c.CompanyName, 
    d.CategoryName, 
    ProdCategoryID 
FROM tblProduct a 
LEFT OUTER JOIN tblShelfComp b 
    ON a.ProductSID = b.ShelfID 
INNER JOIN tblCompany c 
    ON a.ProductCompId = c.CompId 
LEFT OUTER JOIN tclCategory d 
    ON a.CategoryID = d.CategoryID 
ORDER BY a.ProductName 

は、このクエリを実行するのには時間がかかるO/Pに

id Select_type table type Possible_keys Key Key_len ref rows Extra 
1 SIMPLE a ALL (NULL) (NULL) (NULL) (NULL) 45850  Using where; Using filesort 
1 SIMPLE b Eq_ref PRIMARY PRIMARY 34 a. ProductSID 1 (NULL) 
1 SIMPLE c Eq_ref PRIMARY PRIMARY 34 a. ProductCompId 1 (NULL) 
1 SIMPLE d Eq_ref PRIMARY PRIMARY 34 a. CategoryID 1 (NULL) 

を与えるMySQLデータベースを使用しています。だから私はそれがどのように機能しているかを知るために説明を使用しています。しかし、私はこの結果をどうするかを決めることができません。パフォーマンスを最適化するために必要なステップ

+0

結果の行数に応じてクエリがどのくらい時間がかかりますか? – Seb

+0

実行には約20秒かかります。 45k行を返す –

+1

私に関係する唯一のことは、結合に使用される主キーフィールドの長さです。それらが整数フィールドではないことを示唆します。整数は結合の方が効率的です。 – Kickstart

答えて

1

"ORDER BY"を使用しない場合、クエリを実行するのにどれくらい時間がかかりますか?これとほぼ同じ時間であれば、クエリの最適化の可能性はありません。 (より良いハードウェア/高速ディスクに投資するか、最適化のためにmysqlサーバの値を微調整するか)

tblProduct.ProductNameにインデックスを作成するとかなり高速です。しかし、これが助けてくれれば恥ずかしがり屋ではない

関連する問題