0

给定几个表,对包含 where 子句的表中的行数进行轮询的最佳方法是什么?我想立即执行此操作,以便可以将其插入到具有每日行数记录的表中。

tableA - 符合条件 1 的所有行的计数,特定列值 X select count(*) from tableA where col1 = X

tableA - 符合条件 2 的所有行的计数,特定列值 Y select count(*) from tableA where 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';

它似乎运行得很慢,在这种情况下是否有更有效的计算行数的方法?

4

1 回答 1

0

您的查询看起来不错,但您应该在这些列上建立索引。为此,请从文档中

CREATE INDEX idx_col1 ON tableA (col1);
CREATE INDEX idx_col2 ON tableA (col2);
CREATE INDEX idx_dateCreated on tableB (dateCreated);
于 2013-07-25T19:59:02.550 回答