【发布时间】:2010-01-14 08:23:43
【问题描述】:
我能够完成此查询,但需要 25 秒。那太长了!如何优化此查询?
SELECT COUNT(DISTINCT u1.User_ID ) AS total
FROM UserClicks u1
INNER JOIN (SELECT DISTINCT User_ID
FROM UserClicks
WHERE (Date BETWEEN DATE_SUB(:startDate, INTERVAL 1 MONTH) AND :startDate)) u2
ON u1.User_ID = u2.User_ID
WHERE (u1.Date BETWEEN :startDate AND :endDate)
这是在 MySQL 数据库上使用的
【问题讨论】:
-
您的 UserClicks.User_ID 字段是否不唯一且已编入索引?这应该使您能够摆脱查询的两个 DISTINCT 部分。无论如何,我认为@Parrots 下面有你的答案。
-
@andrew:真的有你想做的吗,那些在开始日期前一个月和开始日期和结束日期之间点击的人? (见下面的 Quassnoi cmets)