计算X天内在不同表中输入了多少行的最有效方法?

时间:2013-07-25 17:45:08

标签: mysql sql count subquery

给定几个表,在包含where子句的表中对行计数进行轮询的最佳方法是什么?我想立刻这样做,因此它可以插入到每日记录行数的表中。

tableA - 符合条件1的所有行的计数,特定列值X.     从tableA中选择count(*),其中col1 = X

tableA - 符合条件2的所有行的计数,特定列值Y.     从tableA中选择count(*),其中col2 = Y

这两个很容易组合成:

select
(select count(*) from tableA where col1 = X) as 'X count',
(select count(*) from tableA where col2 = Y) as 'Y count'

但现在我想加入: tableB - 在最后指定的时间间隔内创建的所有行的计数

select count(*) from tableB where dateCreated >= date_sub(curdate(), interval 1 day) where col3 = Z;

这给了我:

select
(select count(*) from tableA where col1 = X) as 'X count',
(select count(*) from tableA where col2 = Y) as 'Y count',
(select count(*) from tableB where dateCreated >= date_sub(curdate(), interval 1 day)) as 'Z count';

似乎运行速度非常慢,在这种情况下是否有更有效的计数行的方法?

1 个答案:

答案 0 :(得分:0)

您的查询看起来很好,但您应该在这些列上编制索引。为此,请从the documentation

开始
CREATE INDEX idx_col1 ON tableA (col1);
CREATE INDEX idx_col2 ON tableA (col2);
CREATE INDEX idx_dateCreated on tableB (dateCreated);