for-each loop over BSONObj is slower than explicit BSONObjIterator in MatchExpressionParser code

XMLWordPrintableJSON

    • Type: Improvement
    • Resolution: Fixed
    • Priority: Major - P3
    • 3.6.7, 3.7.1
    • Affects Version/s: 3.6.0
    • Component/s: Internal Code
    • None
    • Fully Compatible
    • v3.6
    • Platforms 2018-01-01, Platforms 2018-01-15
    • 0
    • None
    • 3
    • None
    • None
    • None
    • None
    • None
    • None
    • None

      As a part of SERVER-30761, we refactored parseInExpression() and changed a loop that looked like

      BSONObjIterator iter(theArray);
      while (iter.more()) {
          auto e = iter.next();
          // ...
      }
      

      into

      for (auto e : theArray) {
          // ...
      }
      

      This has caused a performance regression of roughly 5% when parsing a $in, and is apparent with very large in expressions. The real fix seems like achieving performance parity between the two ways to iterate through a BSONObj, but I'm not sure how much we want to dive down the rabbit hole in terms of seeing the machine code that's generated by the two constructs.

              Assignee:
              Mathias Stearn
              Reporter:
              Kyle Suarez (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              7 Start watching this issue

                Created:
                Updated:
                Resolved: