0

大きなテーブル (約 500 万行の増加) では、次のクエリを実行するとかなり時間がかかります。

SELECT track, MIN(time) as t, buse, serviceid 
FROM depart 
WHERE `to` IS NOT NULL AND platform_id = 1025 AND time > 741 
GROUP BY serviceid

このクエリの高速実行をサポートするのに適したインデックスは何ですか? これまでのところ、 、およびでplatform_idインデックスを使用しています。wherefilesorttemp

前もって感謝します。

4

2 に答える 2

1

適切なインデックス作成アプローチは、データの分散に依存します。1つの行だけが1025のプラットフォームを持っている場合、状況はすべての行が1025のプラットフォームを持っている場合とは異なります。

合理的な仮定を立てると、おそらく(プラットフォーム、時間)のインデックスが必要になります。が通常NULLの場合to、インデックス(プラットフォーム、to、時間)が改善される可能性があります。

whereインデックスが使用される方法は、MySQLが句を満たすインデックス内の値を見つけることです。次に、それらのレコードのすべてのページを読み込んで、残りの変数を取得し、クエリを処理します。基準を満たすレコードが数百あると仮定すると、これによりクエリが大幅に高速化されます。

于 2013-01-06T15:01:01.227 に答える
0

これを試してください:s

SELECT track, MIN(time) as t, buse,DISTINCT serviceid 
FROM depart 
WHERE `to` IS NOT NULL AND platform_id = 1025 AND time > 741 
于 2013-01-06T14:12:11.477 に答える