CouchBase:是否可以加快没有条件的查询?

CouchBase: is it possible to speed up a query that does not have a condition?

我正在尝试通过创建索引来加快我在 CouchBase 上的性能。我的一个查询是这样的:

SELECT p.arcid
FROM `flightplans` as p
WHERE ANY route_correct_status IN (
    SELECT DISTINCT arcid,
    ARRAY point.id FOR point IN route.point
    WHEN point.status = "correct-status" END AS list_points_correct_status
    FROM `flightplans`
) SATISFIES route_correct_status.arcid = p.arcid
AND route_correct_status.list_points_correct_status[0] = p.somepoint END

我尝试提取内部 SELECT 以找到合适的索引,然后我意识到其中没有条件。我尝试为此创建索引的所有操作都失败了。但是主索引对我来说太慢了。

有没有办法加快为存储桶中的每个元素构建数组?一般来说,索引(或其他一些机制)可以帮助没有条件的查询吗? (也许通过预先计算?)

谢谢

使用 ANSI 连接查询。 https://blog.couchbase.com/ansi-join-support-n1ql/

CREATE INDEX ix1 ON flightplans( DISTINCT ARRAY point.status FOR point IN route.point END);
CREATE INDEX ix2 ON flightplans(arcid, somepoint);

SELECT p.arcid
   FROM   (SELECT DISTINCT cs.arcid,
            FIRST point.id FOR point IN cs.route.point WHEN point.status = "correct-status" END AS pointid
       FROM `flightplans` AS cs
       WHERE ANY point IN cs.route.point SATISFIES point.status = "correct-status" END) AS d
JOIN `flightplans` AS p ON d.arcid = p.arcid AND d.pointid = p.somepoint;

如果你一直在寻找"correct-status"你可以使用以下两个选择必须使用覆盖索引

CREATE INDEX ix1 ON flightplans( FIRST point.id FOR point IN route.point WHEN point.status = "correct-status" END, arcid);
CREATE INDEX ix2 ON flightplans(arcid, somepoint);

SELECT p.arcid
    FROM  (SELECT DISTINCT cs.arcid,
            FIRST point.id FOR point IN cs.route.point WHEN point.status = "correct-status" END AS pointid
       FROM `flightplans` AS cs
       WHERE (FIRST point.id FOR point IN cs.route.point WHEN point.status = "correct-status" END) IS NOT NULL) AS d
JOIN `flightplans` AS p ON d.arcid = p.arcid AND d.pointid = p.somepoint;