n1ql中的订购依据索引

问题描述

希望大家都过得很好。

我试图通过创建索引来优化带有order by子句的N1Ql查询。 3。 下面是查询

Select * from employee where type= employee and number='123' and division='456'
order by class,number

索引可能是

Create index idx_123 on employee(number,division,class) where type='employee' 

但是使用索引的效果不是很好。这里有任何建议。

解决方法

当前索引的问题是它不覆盖查询的位置,排序依据或选择部分。为了可能的立即改进,请尝试添加以下覆盖where子句的索引:

CREATE INDEX idx_where ON employee (type,number,division);

我们也可以尝试在上述内容上进行改进以涵盖ORDER BY子句,但是如果您始终希望得到适度大小的结果集(例如SELECT *,覆盖select子句可能就不可能了。

,

以下查询和索引使用索引顺序。您可以通过EXPLAIN进行验证并进行检查(末尾没有“ #operator”:“ Order”)

CREATE INDEX idx_where ON employee (division,class,`number`) WHERE type ="employee";

SELECT * 
FROM employee
WHERE type= "employee" 
     AND `number`='123' 
     AND division='456'
ORDER BY class,`number`;

由于投影包含*,因此必须获取可能需要时间的文档。

,

在这种情况下,文档大小约为20 MB,这是要用作索引的最大文档大小,因此索引无法掩盖这一点,并且性能不佳。 我们删除了该文档,它起作用了。 谢谢大家的建议。