私たちのアプリでは、次の3つのテーブルを使用します。
- カテゴリ
- 都市(category_id)
- city_data(distance、city_id)
$q = "SELECT a.id as aid,a.distance as adistance, b.id as bid,b.distance as bdistance FROM city_data as a JOIN city_data as b on a.id != b.id JOIN cities AS a_cities ON a.city_id = a_cities.id JOIN cities AS b_cities ON b.city_id = b_cities.id WHERE (a_cities.category_id='".$_GET["c"]."' AND b_cities.category_id='".$_GET["c"]."') AND abs(a.distance - b.distance) < 100 ORDER BY RAND() LIMIT 1";
テーブルcitys、city_dataの行数は同じで、ほぼ5.000です。上記のクエリには約45秒かかりますが、これはひどいことです。さらに悪いことに、テーブルにはさらに5.000行が必要であり、合計で10.000行になります...
上記のクエリの実行時間を短縮する方法についてお聞きしたいのですが...45秒は受け入れられません...
この問題を解決するオプションはありますか?
編集:アドバイスありがとうございます 。ORDERBYRAND()の部分を削除しました。時間は非常に短く、約22秒ですが、これは通常の使用にはまだ長すぎます。