【发布时间】:2020-07-31 03:43:17
【问题描述】:
在某些情况下,我使用 n1ql 计算所有记录
Select count(*) from bucket where type='xyz' and column1='abc'.
这大约需要 25 秒,但如果我将其替换为 count(1) 则需要 19 秒。
我的问题是我们可以使用count(1) 而不是count(*)。我相信它只计算一列总数而不是全部计算。如果在 n1ql 中不是这种情况,请告诉我。
【问题讨论】:
-
我认为没有任何可衡量的统计数据表明 count(1) 比 count() 更好,公平地说,我不是 couchbase 专家对此发表评论。然而,我记得在 Oracle 8i 之前有过这种讨论。一开始就不是真的!语义上,count() 是有意义的,它表示计算所有记录,count(1) 表示计算表中 1 的数量?
-
这个问题你可以自己回答。结果是一样的吗?另见Why should I provide a Minimal Reproducible Example for a very simple SQL query?
-
count(1)比count(*)快是一个长期存在但仍然错误的神话。在您的情况下,第二次执行查询可能会从缓存中获取数据(由第一次查询填充)。 -
您也可以尝试
sum(1)进行比较。但我同意@a_horse_with_no_name - 即席计时只给出性能的指示,但为了增加它们的重要性,运行这两个查询几次以预热缓存,然后在安静的时间运行每个查询几次并使用中间值每个。