我对一个大的 mysql 查询(mysql 5.0)感到头疼,我希望这里有人能提供帮助。
之前我问过如何从连接查询中获取不同的值 mysql count only for distinct values in join query
我得到的响应(使用带有连接的子查询)
选择 * 来自媒体 m 内部联接 (选择uid 来自 users_tbl 限制 0,30) 地图 在 map.uid = m.uid 内连接 users_tbl u 在 u.uid = m.uid
不幸的是,我的查询变得越来越不守规矩,虽然我运行它,但加入派生表需要太长时间,因为派生查询没有可用的索引。
我的查询现在看起来像这样
选择 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 从分机 右外连接( 选择 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 ' | ') 作为元 来自媒体 在 media.bid = users.bid 上加入用户 LEFT JOIN tags ON users.bid=tags.bid 在 -122.52224684058 和 -121.79760915942 之间的“长” 和 37.07500915942 和 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)
呸!
所以,正如你所看到的,如果我正确理解了我的问题,我有两个没有索引的派生表(我不否认我可能以某种方式搞砸了 Join 语句,但我一直在搞乱不同的类型,这结束了吗给我我想要的结果)。
创建与此类似的查询的最佳方法是什么,这将使我能够利用索引?我敢说,我实际上还有一张桌子可以在以后添加到组合中。
目前,我的查询需要 0.8 秒才能完成,但我确信如果我可以利用索引,这可能会快得多。