Description
Repro:
> t = db.t
|
> t.drop()
|
> t.ensureIndex({a: 1})
|
> t.ensureIndex({b: 1})
|
> t.ensureIndex({a: 1, b: 1})
|
> t.find({a: 1, b: 1})
|
Using the compound index is always better than index intersection for the query above. However, we generate index intersection solutions, e.g.:
FETCH
|
---fetched = 1
|
---sortedByDiskLoc = 0
|
---getSort = []
|
---Child:
|
------KEEP_MUTATIONS
|
---------filter:
|
$and
|
a == 1.0
|
b == 1.0
|
---------fetched = 0
|
---------sortedByDiskLoc = 0
|
---------getSort = []
|
---------Child:
|
------------AND_HASH
|
---------------fetched = 0
|
---------------sortedByDiskLoc = 0
|
---------------getSort = [{ a: 1 }, { a: 1, b: 1 }, { b: 1 }, ]
|
---------------Child 0:
|
---------------IXSCAN
|
------------------keyPattern = { b: 1.0 }
|
------------------direction = 1
|
------------------bounds = field #0['b']: [1.0, 1.0]
|
------------------fetched = 0
|
------------------fetched = 0
|
------------------sortedByDiskLoc = 1
|
------------------getSort = [{ b: 1 }, ]
|
---------------Child 1:
|
---------------IXSCAN
|
------------------keyPattern = { a: 1.0, b: 1.0 }
|
------------------direction = 1
|
------------------bounds = field #0['a']: [1.0, 1.0], field #1['b']: [MinKey, MaxKey]
|
------------------fetched = 0
|
------------------fetched = 0
|
------------------sortedByDiskLoc = 0
|
------------------getSort = [{ a: 1 }, { a: 1, b: 1 }, { b: 1 }, ]
|
We perhaps shouldn't even generate index intersection solutions that we know will perform worse than the compound index solution.
Attachments
Issue Links
- is related to
-
SERVER-12673 index bounds incorrect on compound index with simple query
-
- Closed
-