在这种情况下,我将使用n1ql中的所有记录进行计数
Select count(*) from bucket where type='xyz' and column1='abc'.这大约需要25秒,但如果我用count(1)替换它,则需要19秒。我的问题是我们可以用count(1)代替count(*)吗?我相信它只计算一栏总数,而不是全部计数。如果n1ql中没有这种情况,请告诉我。
发布于 2020-07-31 12:58:56
如果您使用的CB 5.0及以上,计数(*)和计数(1)是相同的。
以下内容应该表现得更好。
CREATE INDEX ix1 ON bucket(column1) WHERE type = "xyz";
SELECT COUNT(1) AS cnt
FROM bucket
WHERE type='xyz' AND column1='abc';发布于 2020-07-31 05:45:39
count(1)。数据库引擎遍历整个表,但不从中获取值。服务器层在每一行中放置一个数字"1“并返回,判断其不能为空,并按行进行累加。count(*).It,需要从磁盘读取数据,然后累加计数。数据库引擎将总行数存储在磁盘上的表中,因此执行count(*)将直接返回此数目的行数。如果使用count(*),则不会使用任何字段,也不会使用taken.Because值--它是按行累加的。数据库已经专门针对它进行了优化。count(PRIMARY KEY Id)。数据库引擎返回的Id包括解析数据行和复制字段值。count(Field)。如果此“字段”定义为null,则从记录行逐行读取该字段,判断其不能为空,并按行进行累加;如果允许此“字段”定义为null,则在执行该“字段”定义时,判断该字段可能为空,我们需要取出该值并再次判断,如果它不为空,则进行累加。最后,,让我们对效率进行排序:
count(*)>=count(1)>count(id)>count(field)
https://stackoverflow.com/questions/63185453
复制相似问题