这是我的主表,用于根据日期存储关键字印象。
+---------+-----------+------------+-------------+
| 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”,并且左联接使查询非常慢。
我的问题是
如何使其更快?
谢谢
答案 0 :(得分:0)
此
userDetails
.where({ user_id: user.attributes.id })
.orderBy('created_at', 'DESC') // Last created first
.fetch({ require: false })
.then(res => console.log(res.toJSON()))
需要
on second.keywordId = keyword.keywordId
and second.reportDate = '2018-12-25'
旁注:说起来可能更简单
INDEX(keywordId, reportDate) -- in either order
代替
'2018-12-21' - INTERVAL 3 DAY