SQLite联合表和计数(*)的有效方法
我想使用where子句计算两个表include的行数。我已经找到了解决办法,但不知道这是否是最好的办法。where子句是动态生成的,最多可过滤5列。该表有10列,最多可以有数百万条记录SQLite联合表和计数(*)的有效方法,sql,sqlite,Sql,Sqlite,我想使用where子句计算两个表include的行数。我已经找到了解决办法,但不知道这是否是最好的办法。where子句是动态生成的,最多可过滤5列。该表有10列,最多可以有数百万条记录 select count(*) from ( select * from pending {whereClause} union all select * from history {whereClause} ) 由于数据量大,联盟的成本相当高。您可能会发现单独进行计数要快一点: select p.cnt
select count(*) from
(
select * from pending {whereClause}
union all
select * from history {whereClause}
)
由于数据量大,联盟的成本相当高。您可能会发现单独进行计数要快一点:
select p.cnt + h.cnt
from (select count(*) as cnt from pending {whereClause}) p cross join
(select count(*) as cnt from history {whereClause}) h;
此外,这打开了查询仅为每个子查询使用索引的可能性。这可能是一个更显著的性能提升。由于表可以有不同的索引,并且您可以应用差异WHERE子句,因此您的解决方案是完全有效的 由于在检查不同集合的签名时会有开销,因此您可以更快地分别获得这两个计数,然后将它们相加
SELECT
(select COUNT(*) from pending {whereClause})
+
(select COUNT(*) from history {whereClause})
谢谢你的解决方案!如果您需要知道每个表的结果,这是一个好方法!