答案 0 :(得分:0)
查询非常大,我希望这会花费相当多的时间,但你可以尝试在Advert.uid上添加一个索引,如果它不存在的话。除此之外,有一个比我更好的SQL-foo的人将不得不回答这个问题。
答案 1 :(得分:0)
首先,您的WHERE子句基于特定的“User.ID”,但广告(用户ID)在Advert_Log上有一个索引。因此,首先,更改WHERE子句以反映此...
Where
AdverLog.Advert = 40341
然后,将“LEFT JOIN”移到用户表的“JOIN”。
最后(没有完全重写查询),我将使用“STRAIGHT_JOIN”关键字......
select STRAIGHT_JOIN
... rest of query ...
告诉优化器以明确声明的顺序/关系执行查询。
要优化的另一个方面是预先查询“点数”(基于广告和操作的计数和日志),然后从中获取答案(作为子查询),而不是通过两个查询运行... ...但是我有兴趣知道以上WHERE,JOIN和STRAIGHT_JOIN的影响。
此外,根据EITHER Advert_Log.Advert(userID)或TX_Reality_Credit.User(自Advert_Log和TX_Reality_Credit(TRC)之间的连接后看起来不相同的另一个用户ID,查看对用户表的连接)是基于TRC.UID),除非这是一个不正确的假设。当你测试多个用户ID时,这可能会产生错误的结果......广告用户,以及“TRC”表中的“用户”......这将导致哪个用户的信用被应用于“积分”计算。
为了更好地理解关系和上下文,您能否从Advert_Log到TX_Reality_Credit的角度,以及广告与UID与用户的对象,更清楚地了解这些表中的内容......