私は依存クエリであり、多くの実行時間がかかるこのクエリを持っています
SELECT
u.id,
u.user_name,
ifnull((select longitude from map where user_id = u.id order by map_id desc limit 1 ),0) as Longitude,
ifnull((select latitude from map where user_id = u.id order by map_id desc limit 1 ),0) as Longitude,
(select created from map where user_id = 1 order by created desc limit 1) as LatestTime
FROM users as u
WHERE id IN(SELECT
user1_id FROM relation
WHERE users.id = 1)
ORDER BY id;
私は(依存)でこのクエリを試しました
SELECT
u.id,
u.user_name,
m.map_id,
m.longitude,
m.latitude,
m.Date as created
FROM users as u
left join (select
map_id,
longitude,
latitude,
user_id,
max(created) as `Date`
from map
group by user_id) as m
on m.user_id = u.id
WHERE id IN(SELECT
user1_id FROM relation
WHERE users.id = 1)
ORDER BY id;
問題は、最初のクエリが依存しており、正常に動作しているが、実行に時間がかかることです。2 番目のクエリの問題は、最新の作成時間を取得していないことです。今、私はこのクエリを最適化したいと考えています。テーマは、サブクエリで最初にグループを作成し、次に各グループの最後のレコードを取得しようとすることです。これがテーブル構造です。
users : id , user_name
map : map_id , user_id ,longitude , latitude, created
relations : id , user1_id , user2_id , relation