我是 couchbase 的新手,我正在使用 N1QL 进行一些查询,但这需要很长时间(9 分钟) 我的数据有 200.000 个文档并且文档具有嵌套类型,文档中嵌套类型的数量为 6.000.000分布在 200.000 个文档之间,因此 UNNEST 操作很重要。我的数据样本之一是:
{"p_partkey": 2, "lineorder": [{"customer": [{"c_city": "INDONESIA1"}], "lo_supplycost": 54120, "orderdate": [{"d_weeknuminyear": 19}], "supplier": [{"s_phone": "16-789-973-6601|"}], "commitdate": [{"d_year": 1993}], "lo_tax": 7}, {"customer": [{...
我正在做的一个查询是:
SELECT SUM(l.lo_extendedprice*l.lo_discount*0.01) as revenue
from part p UNNEST p.lineorder l UNNEST l.orderdate o
where o.d_year=1993 and l.lo_discount between 1 and 3 and l.lo_quantity<25;
数据具有上述字段。但是执行需要9分钟。我只用我的电脑来做,所以只有一个节点。我的电脑有 16GB 的 RAM,集群 RAM cota 是 3.2GB,只有一个 3GB 的存储桶。我的数据总大小为 2.45GB。我使用了这里提到的计算: //docs.couchbase.com/admin/admin/Concepts/bp-sizingGuidelines.html来调整我的集群和存储桶的大小。我做错了什么,或者这次对于这么多的数据是正确的?
现在我已经创建了如下索引:
CREATE INDEX idx_discount ON part( DISTINCT ARRAY l.lo_discount FOR l IN lineorder END );
CREATE INDEX idx_quantity ON part( DISTINCT ARRAY l.lo_quantity FOR l IN lineorder END );
CREATE INDEX idx_year ON part( DISTINCT ARRAY o.d_year FOR o IN ( DISTINCT ARRAY l.orderdate FOR l IN lineorder END ) END );
但是数据库不使用它。
一个查询示例是:
SELECT SUM(l.lo_extendedprice*l.lo_discount*0.01) as revenue
from part p UNNEST p.lineorder l UNNEST l.orderdate o
where o.d_year=1993 and l.lo_discount between 1 and 3 and l.lo_quantity<25;
另一个例子,我创建了索引:
CREATE INDEX teste3 ON `part` (DISTINCT ARRAY l.lo_quantity FOR l IN lineorder END );
并询问:
select l.lo_quantity from part as p UNNEST p.lineorder l where l.lo_quantity>20 limit 3
因为我已经删除了主索引,所以它不执行。返回错误:“键空间部分没有主索引。使用 CREATE PRIMARY INDEX 创建一个。”,