我真的不明白如何使用索引提高查询的性能。
db.Vendite.aggregate([{$group: {
_id: {
anno: "$anno", mese: "$mese", cod_age: "$cod_age", cod_int: "$cod_int", cod_cli: "$cod_cli", cod_linea_comm: "$cod_linea_comm", cod_sett_comm: "$cod_sett_comm", _art: "$cod_art"},
vendite_quantita: {
$sum: {
$add: [ {
$subtract: ["$ven_quantita", "$res_quantita"]}, "$oma_quantita"]}},
vendite_quantita_pz: {
$sum: {
$add: [{
$subtract: ["$ven_quantita_pz", "$res_quantita_pz"]},
"$oma_quantita_pz"]}},
vendite_netto: {
$sum: {
$subtract: [{
$subtract: ["$ven_lordo", {
$add: ["$ven_incondizionato", "$ven_finanziari", "$ven_canvass", "$ven_offerta"]}]},
{$subtract: ["$res_lordo", {$add: ["$res_incondizionato", "$res_finanziari", "$res_offerta", "$res_offerta"]}]}]} }}},
{ $sort: { "anno": 1, "mese": 1, "cod_age": 1, "cod_int": 1, "cod_cli": 1, "cod_linea_comm": 1, "cod_sett_comm": 1, "cod_art": 1 }}]).explain("executionStats")
这是我的查询,观看mongoDB大学教程,我知道最好使用匹配>排序>范围的索引。就我而言,我尝试过以下索引:
anno_1_mese_1_cod_age_1_cod_int_1_cod_cli_1_cod_linea_comm_1_cod_sett_comm_1_cod_art_1
这是我的排序顺序。
查询时间没有任何改善。我的第一个想法是查询太详细了……我的意思是该集合有 270 万条记录并返回 210 万条结果,因此索引可以提供帮助,但作用不大。这是正确的还是我做错了什么?
在索引过程中我也应该照顾我的求和字段吗?
只是说,当我使用查询而不通过“提示”强制任何索引时,mongo 会在没有任何索引的情况下执行它。
在索引中包含 sum 字段可能不会显着提高性能,除非您经常根据这些字段进行查询。但是,如果这些字段在您的查询中经常使用,则值得尝试对这些字段建立索引。
以下是创建覆盖聚合查询中使用的字段的索引的方法:
db.Vendite.createIndex({ “年”:1, “梅塞”:1, “鳕鱼年龄”:1, “cod_int”:1, “cod_cli”:1, “cod_linea_comm”:1, “cod_sett_comm”:1, “鳕鱼艺术”:1 });