私は大きな mysql クエリ (mysql 5.0) で頭がいっぱいです。誰かが助けてくれることを願っています。
前に、結合されたクエリから個別の値を取得する方法を尋ねました mysql は、結合されたクエリの個別の値に対してのみカウントします
私が得た応答(join asでサブクエリを使用)
選択する *
メディアから
内部結合
( uid を選択
users_tbl から
制限 0,30) マップ
on map.uid = m.uid
内部結合 users_tbl u
u.uid = m.uid で
残念なことに、私のクエリはより手に負えなくなりました。クエリを実行しても、派生クエリで使用できるインデックスがないため、派生テーブルへの結合に時間がかかりすぎます。
私のクエリは次のようになります
SELECT mdate.bid、mdate.fid、mdate.date、mdate.time、mdate.title、mdate.name、
mdate.address, mdate.rank, mdate.city, mdate.state, mdate.lat, mdate.`long`,
外部リンク、
ext.source、ext.pre、meta、mdate.img
外部から
右外部結合 (
SELECT media.bid,
media.date、media.time、media.title、users.name、users.img、users.rank、media.address、
media.city, media.state, media.lat, media.`long`,
GROUP_CONCAT(tags.tagname SEPARATOR ' | ') AS メタ
メディアから
media.bid = users.bid でユーザーに参加
users.bid=tags.bid の LEFT JOIN タグ
WHERE `long` BETWEEN -122.52224684058 AND -121.79760915942
AND lat BETWEEN 37.07500915942 AND 37.79964684058
AND 日付 = '2009-02-23'
GROUP BY media.bid、media.date
ORDER BY media.date, users.rank DESC
リミット 0、30
) mdate ON (mdate.bid = ext.bid AND mdate.date = ext.date)
ふぅ!
SO、ご覧のとおり、私の問題を正しく理解していれば、インデックスのない派生テーブルが 2 つあります (そして、何らかの形で Join ステートメントを台無しにした可能性があることは否定しませんが、さまざまなタイプをいじり続けましたが、これで終わりですか?私が望んでいた結果を私に与えてください)。
インデックスを利用できるようにする、これに似たクエリを作成する最良の方法は何ですか? あえて言いますが、実際には、後日ミックスに追加するテーブルがもう 1 つあります。
現在、私のクエリは完了するまでに 0.8 秒かかりますが、インデックスを利用できれば、これはかなり高速になると確信しています。