-
Notifications
You must be signed in to change notification settings - Fork 1.7k
/
measure-index-use.txt
105 lines (71 loc) · 2.97 KB
/
measure-index-use.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
.. index:: index; measure use
.. _index-measure-index-use:
.. _indexes-measuring-use:
=================
Measure Index Use
=================
.. default-domain:: mongodb
.. contents:: On this page
:local:
:backlinks: none
:depth: 1
:class: singlecol
Get Index Access Information with ``$indexStats``
-------------------------------------------------
Use :pipeline:`$indexStats` to get usage statistics about an index.
Return Query Plan with ``explain()``
------------------------------------
Use the :method:`db.collection.explain()` or the
:method:`cursor.explain()` method in :ref:`executionStats
<explain-method-executionStats>` mode to return statistics about the
query process, including the index used, the number of documents
scanned, and the time the query takes to process in milliseconds.
Run :method:`db.collection.explain()` or the :method:`cursor.explain()`
method in :ref:`allPlansExecution <explain-method-allPlansExecution>`
mode to view partial execution statistics collected during plan
selection.
.. include:: /includes/fact-explain-collection-method.rst
Control Index Use with ``hint()``
---------------------------------
To *force* MongoDB to use a particular index for a
:method:`db.collection.find()` operation, specify the index with the
:method:`~cursor.hint()` method. Append the :method:`~cursor.hint()`
method to the :method:`~db.collection.find()` method. Consider the
following example:
.. code-block:: javascript
db.people.find(
{ name: "John Doe", zipcode: { $gt: "63000" } }
).hint( { zipcode: 1 } )
To view the execution statistics for a specific index, append to the
:method:`db.collection.find()` the :method:`~cursor.hint()` method
followed by :method:`cursor.explain()`, e.g.:
.. code-block:: javascript
db.people.find(
{ name: "John Doe", zipcode: { $gt: "63000" } }
).hint( { zipcode: 1 } ).explain("executionStats")
Or, append :method:`~cursor.hint()` method to
:method:`db.collection.explain().find() <db.collection.explain()>`:
.. code-block:: javascript
db.people.explain("executionStats").find(
{ name: "John Doe", zipcode: { $gt: "63000" } }
).hint( { zipcode: 1 } )
Specify the ``$natural`` operator to the :method:`~cursor.hint()`
method to prevent MongoDB from using *any* index:
.. code-block:: javascript
db.people.find(
{ name: "John Doe", zipcode: { $gt: "63000" } }
).hint( { $natural: 1 } )
Instance Index Use Reporting
----------------------------
MongoDB provides a number of metrics of index use and operation that
you may want to consider when analyzing index use for your database:
.. list-table::
* - In the output of :dbcommand:`serverStatus`:
- :serverstatus:`metrics.queryExecutor.scanned`
:serverstatus:`metrics.operation.scanAndOrder`
* - In the output of :dbcommand:`collStats`:
- :data:`~collStats.totalIndexSize`
:data:`~collStats.indexSizes`
* - In the output of :dbcommand:`dbStats`:
- :data:`dbStats.indexes`
:data:`dbStats.indexSize`