Uploaded image for project: 'Core Server'
  1. Core Server
  2. SERVER-75079

Simplify boolean expressions before feeding them to the optimizer

    • Query Optimization
    • Fully Compatible

      As a part of a Skunkworks project we implemented a Boolean expression simplifier which demonstrated good results on some non-trivial Boolean expressions.

      For example,
      given the following indexes: {d: 1, b: 1}, {a: 1}

      and the following query

          '$and': [
              {b: 0},
                  '$or': [
                      {a: 0},
                          '$and': [
                              {c: {'$in': [34, 45]}},
                              {c: {'$nin': [34, 45]}},

      the optimizer chose a full collection scan plan.

      The boolean expression simplifier can simplify this filter just to the following one:

      {a: 0, b: 0}

      given this filter the optimizer chose much more effective index scan on {a: 1} plan.

      The proposed in the Skunkworks project implementation does not depend on any optimizer and can be used for the classic one as well for the Bonsai. This ticket proposes to add the simplification for the classic optimizer. Then we can reuse the implementation of this ticket for the Bonsai: https://jira.mongodb.org/browse/SERVER-74879

            alexander.ignatyev@mongodb.com Alexander Ignatyev
            alexander.ignatyev@mongodb.com Alexander Ignatyev
            0 Vote for this issue
            10 Start watching this issue