場所で並べ替えられた結果を見つけるために使用するクエリがあります。結果は VAT も考慮する必要があるため、これもクエリに含まれます。残念ながら、キャッシュされていない場合、クエリの実行に 4 秒以上かかることがあります。明らかに明らかな問題を見つけたり、改善するために私にできることを提案したりできますか?
クエリで何が起こっているかを明確にするために:
- 距離は、緯度/経度を使用したユークリッド距離で計算されます
- incvat フィールドは、付加価値税が含まれている場合の価格を表示するために使用されます
- WHEN / THEN ステートメントは、最下部に 0 の価格を配置するために使用されます。
クエリ:
SELECT * , ROUND( SQRT( POW( ( 69.1 * ( company_branch_lat - 52.4862 ) ) , 2 ) + POW( ( 53 * ( company_branch_lng - - 1.8905 ) ) , 2 ) ) , 1 ) AS distance,
hire_car_day + ( hire_car_day * 0.2 * ! hire_car_incvat ) AS hire_car_day_incvat,
hire_car_addday + ( hire_car_addday * 0.2 * ! hire_car_incvat ) AS hire_car_addday_incvat,
hire_car_week + ( hire_car_week * 0.2 * ! hire_car_incvat ) AS hire_car_week_incvat,
hire_car_weekend + ( hire_car_weekend * 0.2 * ! hire_car_incvat ) AS hire_car_weekend_incvat
FROM hire_car
LEFT JOIN company_branch ON company_branch_id = hire_car_branchid
LEFT JOIN hire_cartypelink ON hire_cartypelink_carhireid = hire_car_id
LEFT JOIN users ON company_branch_userid = user_id
WHERE 1
GROUP BY hire_car_id
HAVING distance <=30
ORDER BY CASE hire_car_day_incvat
WHEN 0
THEN 40000
ELSE hire_car_day_incvat
END , distance ASC
LIMIT 0 , 30