【发布时间】:2016-01-28 12:15:09
【问题描述】:
我有一个包含参与者、潜在客户和客户的时间线小部件的子查询查询。 例如,表中有 15k 行,但在此日期范围(1 月 1 日至 1 月 28 日)中只有 2k 行,这大约需要 40 秒!
SELECT created_at as date,
(
SELECT COUNT(id)
FROM participant
WHERE created_at <= date
) as participants,
(
SELECT COUNT(DISTINCT id)
FROM participant
WHERE participant_type = "lead"
AND created_at <= date
) as leads,
(
SELECT COUNT(DISTINCT id)
FROM participant
WHERE participant_type = "customer"
AND created_at <= date
) as customer
FROM participant
WHERE created_at >= '2016-01-01 00:00:00'
AND created_at <= '2016-01-28 23:59:59'
GROUP BY date(date)
如何提高性能?
表字段声明如下:
id => primary_key, INT 10, auto increment
participant_type => ENUM "lead,customer", NULLABLE, ut8_unicode_ci
created_at => TIMESTAMP, default '0000-00-00 00:00:00'
【问题讨论】:
-
为
id提供索引 -
id已经被索引为primary_key