Indexing
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
13,024
On Slideshare
5,936
From Embeds
7,088
Number of Embeds
27

Actions

Shares
Downloads
257
Comments
0
Likes
17

Embeds 7,088

http://nosql.mypopescu.com 2,771
http://blog.nosqlfan.com 2,498
http://rafinguer.blogspot.com 571
http://cloud.csdn.net 538
http://rafinguer.blogspot.com.es 222
http://www.csdn.net 221
http://rafinguer.blogspot.mx 122
http://rafinguer.blogspot.com.ar 51
http://gurjarmehul.wordpress.com 22
http://mongospanish.blogspot.com 19
http://translate.googleusercontent.com 9
http://rafinguer.blogspot.fr 6
http://static.slidesharecdn.com 6
http://webcache.googleusercontent.com 6
http://xue.uplook.cn 5
http://cache.baidu.com 5
http://www.uplook.cn 4
http://m.baidu.com 3
http://rafinguer.blogspot.cz 1
http://rafinguer.blogspot.de 1
http://rafinguer.blogspot.nl 1
http://control.blog.sina.com.cn 1
http://blog.sina.com.cn 1
http://xianguo.com 1
http://reader.youdao.com 1
http://xss.yandex.net 1
http://rafinguer.blogspot.com.br 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Indexing Mike  Dirolf  -­‐  @mdirolf  -­‐  10gen,  Inc. http://www.mongodb.org
  • 2. What’s Easy About MongoDB Indexing? It’s  almost  the  same  as  in  your  RDBMS
  • 3. What’s Hard About MongoDB Indexing? It’s  almost  the  same  as  in  your  RDBMS
  • 4. What is an Index? Magic  scaling  sauce?
  • 5. What is an Index? A  data  structure  that  can  be  used  to   make  certain  queries  more  efficient.
  • 6. Indexes Maintain Order Index  on  {a:  1} {a:  0,  b:  9} {a:  2,  b:  0} {a:  3,  b:  2} {a:  3,  b:  7} {a:  3,  b:  5} {a:  7,  b:  1} {a:  9,  b:  1}
  • 7. Indexes Maintain Order Index  on  {a:  1,  b:  -­‐1} {a:  0,  b:  9} {a:  2,  b:  0} {a:  3,  b:  7} {a:  3,  b:  5} {a:  3,  b:  2} {a:  7,  b:  1} {a:  9,  b:  1}
  • 8. B-tree Structure Index  on  {a:  1} [-∞, 5) [5, 10) [10, ∞) [-∞, 5) buckets [5, 7) [7, 9) [9, 10) [10, ∞) buckets {...}  {...}  {...}  {...}  {...}  {...}  {...}  {...}  {...}  {...}  {...}
  • 9. Query for {a: 7} Index [-∞, 5) [5, 10) [10, ∞) [-∞, 5) buckets [5, 7) [7, 9) [9, 10) [10, ∞) buckets {...}  {...}  {...}  {...}  {...}  {...}  {...}  {...}  {...}  {...}  {...} Scan
  • 10. Creating Indexes An  index  on  _id  is  automatic. For  more,  ensureIndex: db.posts.ensureIndex({“name”:  1})
  • 11. Compound Indexes db.posts.ensureIndex({name:  1,  date:  -­‐1})
  • 12. Unique Indexes db.posts.ensureIndex({title:  1},  {unique:  true})
  • 13. Background Builds db.posts.ensureIndex(...,  {background:  true})
  • 14. Indexing Embedded Documents db.posts.ensureIndex({“comments.author”:  1})
  • 15. Multikeys {“tags”:  [“mongodb”,  “indexing”],  ...} db.posts.ensureIndex({“tags”:  1})
  • 16. Geospatial db.posts.ensureIndex({“location”:  “2d”})
  • 17. Listing Indexes db.posts.getIndexes()
  • 18. Dropping an Index db.posts.dropIndex({“tags”:  1})
  • 19. When is an Index Used? Index  on  {a:  1} db.collection.find({a:  0}) db.collection.find({a:  {$in:  [0,  2]}}) db.collection.find({a:  {$gt:  5}}) db.collection.count({a:  0}) db.collection.find().sort({a:  -­‐1}) Partially: db.collection.find({b:  0}).sort({a:  -­‐1})
  • 20. When isn’t an Index Used? Index  on  {a:  1,  b:  -­‐1} db.collection.find({b:  0}) As  a  rule:  try  imagining  how  the   sorted  representation  could  help  the   server  with  your  query.
  • 21. Picking an Index find({x:  10,  y:  “foo”})    scan terminate    index  on  x    index  on  y remember
  • 22. When are Indexes Needed? Frequently  used  queries Low  response  time
  • 23. Indexes Take Up Space db.collection.totalIndexSize()
  • 24. Indexes Slow Down Writes
  • 25. Explain db.collection.find(query).explain(); {        "cursor"  :  "BasicCursor",        "indexBounds"  :  [  ],        "nscanned"  :  57594,        "nscannedObjects"  :  57594,        "n"  :  3  ,        "millis"  :  108 }
  • 26. Explain {        "cursor"  :  "BtreeCursor  x_1",        "indexBounds"  :  [  ],        "nscanned"  :  123,        "nscannedObjects"  :  123,        "n"  :  10  ,        "millis"  :  4 }
  • 27. www.mongodb.org