【发布时间】:2011-10-15 03:20:12
【问题描述】:
这是我编写的 SQL 查询,它运行良好但速度很慢。
SELECT D.Username,
SUM(CASE WHEN D.type = 'Yes' THEN 1 ELSE 0 END) as Yes,
SUM(CASE WHEN D.type = 'No' THEN 1 ELSE 0 END) as No,
SUM(CASE WHEN D.type = '' THEN 1 ELSE 0 END) as Other,
SUM(CASE WHEN S.mobile IS NULL THEN 0 ELSE 1 END) as Sales,
COUNT(*) as TOTAL FROM dairy as D
LEFT JOIN (SELECT DISTINCT mobile FROM sales) as S on D.MobileNo = S.mobile
WHERE source = 'Network' AND UNIX_TIMESTAMP(CheckDate) >= 1309474800 AND UNIX_TIMESTAMP(CheckDate) <= 1309561200
group by D.Username order by TOTAL DESC
如您所见,它计算了 Yes、No、Other 和匹配的 MobileNo (D.MobileNo = S.mobile) 销售的数量。
我尝试为类型、用户名、手机、MobileNO、CheckDate 和来源添加索引 - 性能并没有提高多少。
【问题讨论】:
-
CheckDate的格式是什么?
-
你可以不使用函数更改查询以检查 CheckDate,因为使用此函数包装该列的索引不太有效,请查看stackoverflow.com/questions/95183/…
-
你能发布
SHOW CREATE TABLE diary的输出吗?销售也一样?然后,您的 SELECT 的输出,但前面有EXPLAIN?
标签: mysql sql database sql-optimization