Indexing n1ql中Order By的索引

Indexing n1ql中Order By的索引,indexing,query-optimization,couchbase,n1ql,Indexing,Query Optimization,Couchbase,N1ql,希望大家都做得很好 我试图通过创建索引来优化带有order by子句的N1Ql查询。我怀疑orderby列的顺序和列应该保持在何处以获得正确的索引或顺序在couchbase 6.0.3中并不重要。 下面是一个问题 Select * from employee where type= employee and number='123' and division='456' order by class,number 索引可能是 Create index idx_123 on employee(n

希望大家都做得很好

我试图通过创建索引来优化带有order by子句的N1Ql查询。我怀疑orderby列的顺序和列应该保持在何处以获得正确的索引或顺序在couchbase 6.0.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、order by或select部分。要立即获得改进,请尝试添加包含where子句的以下索引:

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

我们还可以尝试对上述内容进行改进,以涵盖
ORDER BY
子句,但是如果您总是希望结果集的大小适中(比如<100条记录),那么手动哈希排序可能不是一个大的性能问题。请注意,如果您正在执行
select*

,那么覆盖select子句可能是不可能的。下面的查询和索引使用索引顺序。您可以通过执行解释和检查进行验证(无“#运算符”:“顺序”在末尾)


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

在这种情况下,问题在于文档大小约为20 MB,这是作为索引的最大文档大小,因此索引无法掩盖这一点,并且性能不佳。 我们删除了那个文件,它成功了。
谢谢大家的建议。

您能提供您想要选择的确切栏目吗?或者,您真的要选择表中的所有列吗?@TimBiegeleisen所以用例是包括所有列,因此进行获取为什么您建议在整个类型上创建索引而不是在类型上创建部分索引我不熟悉部分索引,但在任何情况下,Coach DB都可能不使用您当前的索引,因为它忽略了
类型
列。仅供参考,Coach DB不支持N1QL-这是Couchbase(常见错误)
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`;