2010-11-27 15 views
1

iveはしばらくの間これを苦労しています。その12秒以上を取って、なぜ3つのテーブルがガウンを持っているので、それはずっと遅くなるのか理解できません。非常に遅いMySQLのSELECTクエリ

SELECT SUM(quantity), rprice, media_file, url, title 
FROM inventory, ndxz_objects, ndxz_media 
WHERE productid = ndxz_objects.id 
AND media_ref_id = ndxz_objects.id 
AND productid = media_ref_id 
AND media_order = (SELECT MIN(media_order) FROM ndxz_media WHERE media_ref_id = ndxz_objects.id) 
GROUP BY productid 
ORDER BY productid DESC 

Theresのは、私はあなたにも、最低限で、ndxz_media.media_ref_idにインデックスを必要と推測しているndxz_objects.idproductid

+0

は(.. your_query_here ...)何を説明しないGROUP BY句に、実際には有効ではありませんが、言いますか?おそらくここに貼り付けて、どこにパフォーマンスが向いているのかという良いアイデアを得ることができます。 – Jaime

答えて

1

各media_ref_id = ndxz_objects.id

あなたも私

media_ref_id上とndxz_mediaテーブルのmedia_orderにインデックスを作成する必要があります代わりに結合を使用してクエリを書き直すことをお勧めします

+0

インデックスが付いているものが0.0022を助けました。 – jackjlgregory

0

上の指標です。 (media_ref_idの列は、列名を非常にはっきりと示していないので、これも当てはまります)。

同じインデックスにはおそらく2番目の列としてmedia_orderが含まれているはずです。

テーブルスキャンが必要なため景気減速は、ネストされたクエリによって引き起こされる
0

問題はほぼ確実に相関サブクエリです。このクエリはほとんどの場合、インデックスごとに1回実行されます。私は以下が同じ結果を達成するはずだと思います。

SELECT SUM(quantity), rprice, media_file, url, title 
FROM inventory, ndxz_objects, ndxz_media, 
(SELECT MIN(media_order) as order FROM ndxz_media GROUP BY media_ref_id) min_orders 
WHERE productid = ndxz_objects.id 
AND media_ref_id = ndxz_objects.id 
AND productid = media_ref_id 
AND media_order = min_orders.order 
GROUP BY productid 
ORDER BY productid DESC 

あなたが提供するクエリはとにかくrprice, media_file, url, titleので、集約されていないか、または

+0

は、rprice、media_file、url、titleをgroup by節のヘルプに含めますか? – jackjlgregory

関連する問題