我有一个查询从表中获取网站访问日志。然后我再加入2个表来获取所有用户的信息。此时查询很好。
慢查询: 然后,我必须使用子查询,以便根据条件获取特定日期的访问日志。正是这个子查询导致整个查询实际上停止了。 30-40秒后查询将完成。
<小时/> 表:
<小时/> 查询:
SELECT COUNT(*) AS visits , table1.userName, table2.userId, table2.col1, table2.col2, table2.col3, table2.col4, table3.col20
FROM table1
LEFT JOIN table2 ON table2.userName = table1.userName
LEFT JOIN table3 ON table3.col2 = table1.col2
WHERE table1.col1 = 'foo'
AND table1.Date > (
SELECT max(a.VisitDate) FROM table4 a
WHERE a.userId = table2.userId AND a.col1 = 'bar'
)
GROUP BY table1.userName, table1.Date
我没有构建此数据结构,也无法更改它。我正在将此查询解析为基本的PDO
函数。
答案 0 :(得分:0)
您可以尝试使用内部联接(在子选择中)
SELECT
COUNT(*) AS visits
, table1.userName
, table2.userId
, table2.col1
, table2.col2
, table2.col3
, table2.col4
, table3.col20
FROM table1
LEFT JOIN table2 ON table2.userName = table1.userName
LEFT JOIN table3 ON table3.col2 = table1.col2
INNER JOIN (
SELECT max(a.VisitDate) as max_visit_date FROM table4 a
WHERE a.userId = table2.userId AND a.col1 = 'bar'
) t on table1.Date > t.max_visit_date
GROUP BY table1.userName, table1.Date;