0

我有以下相当简单的查询

select count(*) from tbl t1, tbl t2

由于某种原因,执行此命令需要数十秒的时间。我想知道为什么会这样?似乎它构建了该表的笛卡尔积(表大约有 270k 行),但是在没有构建积的情况下,行数是显而易见的。

一些澄清会有所帮助。

4

2 回答 2

3

我会假设优化器不是为优化笛卡尔产品而构建的(尤其是不是你提到的大表)。在您的情况下,它可能会构建完整的结果集并对其进行计数。

与其抗争,不如数表一次

select count(*) from tbl

并自己构建产品。

(我假设你有一个比你发布的相当无意义的自我加入更有用的案例:-),请添加更多关于你想要实现的信息。)

于 2012-04-06T15:15:50.963 回答
2

如果只是想知道笛卡尔积为什么不自己计算呢?

SELECT Power(COUNT(*), 2) AS product 
FROM   tbl t1; 
于 2012-04-07T12:11:36.000 回答