【问题标题】:Mysql query to count from A where not in BMysql查询从不在B中的A计数
【发布时间】:2015-02-03 10:30:31
【问题描述】:

我有一个表 A 和一个表 B(以及一个不相关的表 C)。关系是 1:n。

Table A
- id
- c_foreign_key

Table B
- id
- A_id
- datetime

表 A 有大约 400,000 个条目,表 B 大约有 2000 万个。

我有一个时间范围,比如说从 2014/01/01 到 2014/12/31。

在这个范围内每个月我想要的是: 计算表 A 中的所有条目,按 c_foreign_key 分组,其中表 A 在表 B 中没有条目(月 - 1.年到月)。

结果应如下所示:

date    c_foreign_key   count(*)
--------------------------------
14/01   1               2000
14/01   2               3000
...
14/02   1               4000
14/01   2               6000
...

我已经尝试过每个月的 left join 和“not in select”,但性能并不是很好。

【问题讨论】:

  • 向我们展示您尝试过的查询、您提出的索引以及 EXPLAIN SELECT 的输出。

标签: mysql join count


【解决方案1】:

您应该在Mysql Explain Syntax 使用explain 更多信息来调试您的SQL 查询,还应该将index-es 放在datetime 字段上以获得更好的性能。 Explain 通常用于查看 mysql 在您的查询中使用哪些索引。

【讨论】:

  • 我已经在需要的地方设置了索引。我正在努力在一个查询中完成所有这一切。到目前为止,我所拥有的是每个月的查询。
猜你喜欢
  • 1970-01-01
  • 2011-09-01
  • 2012-04-09
  • 1970-01-01
  • 2010-12-05
  • 2022-01-19
  • 1970-01-01
  • 2013-06-04
  • 2011-06-25
相关资源
最近更新 更多