私には得られないMySQLのパフォーマンス上の問題があります。単純な選択クエリのMySQLパフォーマンスの問題
このクエリでは、ほとんどの場合、実行に1秒かかりますが、5分以上かかることがあります。
SELECT sb.id AS id, sb.name AS name,
ROUND(sb.dkprice/100, 0) AS price, bs.name AS shopname, country
FROM shopbikes sb, categoriesshopbikes csb, shops s
WHERE sb.id = csb.`shopbikeid`
AND csb.categoryid = 93
AND sb.brand = 'Ghost'
AND dkprice > 0
AND sb.dkprice IS NOT NULL
AND sb.`shopid` = s.id
ORDER BY dkprice
LIMIT 1
時々、これらのクエリのうちの5〜8個が異なるブランドで同時に実行されていることがあります。
私はSHOW FULL PROCESSLISTを実行すると、これらのクエリのいくつかが実行中であり、そのうちのいくつかが長時間(数分間)実行されていることがわかります。
クエリ内のテーブルはすべて、すべての関連する列(つまり、テーブルが一致する列)のインデックスを持っています。テーブルの
サイズ:
- shopbikes =60万行 = 100,000行
- categoriesshopbikes
- ショップ= 100行
間違って何が起こっていると私は修正することができますどのように任意のアイデアそれ?
アップデート:私は、明示的にクエリを変換した参加:
SELECT sb.id AS id, sb.name AS NAME,
ROUND(sb.dkprice/100, 0) AS price, s.name AS shopname, country
FROM shopbikes sb
JOIN categoriesshopbikes csb ON (sb.id = csb.shopbikeid)
JOIN shops s ON (sb.shopid = s.id)
WHERE csb.`categoryid` = 93
AND sb.`brand` = 'Cannondale'
AND dkprice > 0
AND dkprice IS NOT NULL
ORDER BY dkprice
LIMIT 1
それは助けにはなりませんでした。依然としてクエリの実行にはしばしば時間がかかります。
出力についての説明:http://i.imgur.com/kfMPBrd.png
サイドノート:明示的な結合構文(別名ANSI結合)は長年にわたり使用されています(MySQLはこれを最初からサポートしている可能性があります)。私はそれがクエリの読みやすさをより読みやすくするので、試してみることをお勧めします。 –
「SHOW FULL PROCESSLIST」出力にリストされている遅いクエリを投稿してください。 –
'EXPLAIN'の出力はどこですか?どのストレージエンジンについて話していますか?あなたのMySQLはサーバリソースを適切に利用できるようにチューニングされていますか?'EXPLAIN'(それが何であるかわからない場合は同様のmysql質問をチェックします)、使用しているストレージエンジン、問題の各テーブルとMySQLの' SHOW CREATE TABLE'の出力を提供する必要があります構成。その後、ボトルネックとそれをどのように並べ替えるかを決定するのに十分な情報が得られます。 – Mjh