【发布时间】:2020-04-22 20:11:21
【问题描述】:
这是我的主表,它根据日期存储关键字展示次数。
+---------+-----------+------------+-------------+
| ID | KeywordId | ReportDate | Impressions |
+---------+-----------+------------+-------------+
| 3324620 | 969274443 | 2018-12-21 | 1 |
+---------+-----------+------------+-------------+
| 3334253 | 969274443 | 2018-12-22 | 0 |
+---------+-----------+------------+-------------+
| 3354119 | 969274443 | 2018-12-23 | 20 |
+---------+-----------+------------+-------------+
| 3373097 | 969274443 | 2018-12-24 | 11 |
+---------+-----------+------------+-------------+
| 3392168 | 969274443 | 2018-12-25 | 1 |
+---------+-----------+------------+-------------+
这是我的累积总和表,它每天都会累加展示次数
+----+-----------+------------+-------------+
| ID | keywordId | ReportDate | Impressions |
+----+-----------+------------+-------------+
| 1 | 969274443 | 2018-12-21 | 1 |
+----+-----------+------------+-------------+
| 2 | 969274443 | 2018-12-22 | 1 |
+----+-----------+------------+-------------+
| 3 | 969274443 | 2018-12-23 | 21 |
+----+-----------+------------+-------------+
| 4 | 969274443 | 2018-12-24 | 32 |
+----+-----------+------------+-------------+
| 5 | 969274443 | 2018-12-25 | 33 |
+----+-----------+------------+-------------+
要获得日期 2018-12-21 和 2018-12-25 之间的展示次数,只需减去
33 - 1 得到结果 22.
我使用下面的查询来得到这个结果。
select keyword.keywordId,(second.impressions - first.impressions) as imp from keyword
inner join diffreportkeyword as first on first.keywordId = keyword.keywordId
and first.reportDate = '2018-12-21'
inner join diffreportkeyword as second on second.keywordId = keyword.keywordId
and second.reportDate = '2018-12-25'
但有时,特定日期没有数据,查询返回 0 行。但这意味着对于特定日期,展示次数为 0。
如果我用左连接改变这个,
select keyword.keywordId,(second.impressions - first.impressions) as imp from keyword
left join diffreportkeyword as first on first.keywordId = keyword.keywordId
and first.reportDate = '2018-12-18'
left join diffreportkeyword as second on second.keywordId = keyword.keywordId
and second.reportDate = '2018-12-25'
这可行,但 diffreportkeyword 表有 500 万行,关键字表有 300k 个不同的“keywordId”,左连接会使查询非常慢。
我的问题是,
我怎样才能让它更快?
谢谢
【问题讨论】:
-
请阅读meta.stackoverflow.com/questions/285551/…并将图片替换为文字。
-
如何在此处添加示例表而不是图像? @nbk
-
您正在使用哪个程序,phpmyadmin 或 mysql workbench 并检查 @Strawbberrys 链接以便查询有效
-
@Strawberry 我更改了图片,谢谢
-
我只能再次向您推荐我之前的评论
标签: mysql optimization cumulative-sum