私は大きな 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 秒かかりますが、インデックスを利用できれば、これはかなり高速になると確信しています。