给定几个表,在包含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';
似乎运行速度非常慢,在这种情况下是否有更有效的计数行的方法?
答案 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);