【问题标题】:php mongodb optimization sort queryphp mongodb优化排序查询
【发布时间】:2014-05-08 09:50:05
【问题描述】:

我需要找到最近的元素,字段“data_caricamento”保存日期。 所以我用 MognoDb shell 做了一个索引:

db.collection.ensureIndex({"data_caricamento": -1})

下面的php代码我有我需要的东西

$cursor=$collection->find();
    $cursor->sort(array("data_caricamento"=> -1));
    $cursor->limit($n);  

但我认为这应该是一个更好的方法, 例如有没有办法直接查询索引? 谢谢。

【问题讨论】:

    标签: php mongodb query-optimization mongodb-php


    【解决方案1】:

    有没有办法直接查询索引?

    有点。您可以通过以下方式在此处进行覆盖查询:

    $cursor = $collection
        ->find(array(), array('_id' => 0, 'data_caricamento' => 1))
        ->sort(array("data_caricamento" => -1))
        ->limit($n);
    

    这将只查询索引。

    【讨论】:

    • 但即使索引尚未排序,仍会排序。所以复杂性没有改变
    • @user3535936 你是什么意思?索引已经排序,您只是从索引中的位置读取
    • 但是在你的代码上仍然有 3 个命令在管道 find->sort->limit 所以我问自己它是否会提高性能
    • @user3535936 是的,我所做的只是添加投影,让 MongoDB 知道它需要挑选什么,让它说:“我不需要查看记录就知道该挑选什么”
    【解决方案2】:

    尝试使用提示。如果要检查查询是否使用了索引,请使用 explain()。

    ....
    $collection->find()->sort(array('data_caricamento'=>1))->hint(array('data_caricamento'=>1));
    print_r($cursor->explain());
    

    这将帮助您看到您的查询正在命中索引,以便更快地搜索和排序! 干杯!

    【讨论】:

      猜你喜欢
      • 2021-11-09
      • 2015-01-21
      • 2015-01-09
      • 2015-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多