问题描述
希望大家都过得很好。
我试图通过创建索引来优化带有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,这是要用作索引的最大文档大小,因此索引无法掩盖这一点,并且性能不佳。 我们删除了该文档,它起作用了。 谢谢大家的建议。