私はさまざまなイベントの詳細と、それらのイベントでブックメーカーが提供しているすべてのオッズを保持するデータベースを持っています。MySQLクエリのパフォーマンスを向上させる方法
SELECT
eo1.id,
eo1.event_id,
eo1.market_id,
IF(markets.display_name IS NULL, markets.name, markets.display_name) AS market_name,
IF(market_values.display_name IS NULL, market_values.name, market_values.display_name) AS market_value_name,
eo2.bookmaker_id,
eo2.value
FROM event_odds AS eo1
JOIN markets ON eo1.market_id = markets.id AND markets.enabled = 1
JOIN market_values on eo1.market_value_id = market_values.id
JOIN bookmakers on eo1.bookmaker_id = bookmakers.id AND bookmakers.enabled = 1
JOIN event_odds AS eo2
ON
eo1.event_id = eo2.event_id
AND eo1.market_id = eo2.market_id
AND eo1.market_value_id = eo2.market_value_id
AND eo2.value = (
SELECT MAX(value)
FROM event_odds
WHERE event_odds.event_id = eo1.event_id
AND event_odds.market_id = eo1.market_id
AND event_odds.market_value_id = eo1.market_value_id
)
WHERE eo1.`event_id` = 6708
AND markets.name != '-'
GROUP BY eo1.market_id, eo1.market_value_id
ORDER BY markets.sort_order, market_name, market_values.id
これは私がデータベースのサイズが成長してきたので、非常にあることを始めていますが欲しいものを正確に返します。私は、私は各イベントの賭けのそれぞれ異なるタイプのための最高のオッズを取得するために使用しています次のクエリを持っていますスロー。私は現在、イベント・オッズ・テーブルに500,000を超えるレコードがあり、クエリの実行には約2分かかります。ハードウェアはまともな仕様で、すべての列が正しく索引付けされ、使用される表エンジンはすべての表のMyISAMです。このクエリを最適化してより速く実行するにはどうすればよいですか?
質問の最適化に関する質問には、show create table [table]文とexplain [query]が含まれている必要があります。 –