Your SlideShare is downloading. ×
Indexing & query optimization
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Indexing & query optimization

2,146

Published on

My slides from MongoATL (2-8-2011)

My slides from MongoATL (2-8-2011)

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,146
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
58
Comments
0
Likes
4
Embeds 0
No embeds

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 & Query Optimization
    • Jared Rosoff ( [email_address] )
  • 2. Overview
    • Indexing 101
    • Profiling your queries
    • Creating Indexes
    • Managing Index
  • 3. Indexing 101
  • 4. Ack! My queries are slow! http://michaelprescott.typepad.com/.a/6a00d83451574c69e20134858a87a2970c-800wi
  • 5. Index FTW! http://musformation.com/pics/excited.jpg
  • 6. Why did that happen? Magic More Magic
  • 7. Table scans 1 2 3 4 5 6 7 Looked at 7 objects Find where x equals 7
  • 8. Tree Lookup 7 6 5 4 3 2 1 Looked at 3 objects Find where x equals 7
  • 9. O(n) vs. O(log n) Table scan Index Number of records Number of comparisons
  • 10. Analyzing Query Performance
  • 11. Using the Profiler
    • db.setProfilingLevel( level )
      • 0 == off
      • 1 == slow operations (>100ms)
      • 2 == all operations
  • 12. Profiler Output
    • db.system.profile.find ({millis:{$gt:5}});
    • {
    • "ts" : "Thu Jan 29 2009 15:21:27 GMT-0500 (EST)" ,
    • "info" : "query test.foo ntoreturn:0 exception bytes:53" ,
    • "millis" : 88
    • }
  • 13. Use explain
    • query = db.coll.find({title:”My blog”})
    • query.explain();
    { "cursor" : " BasicCursor ", "indexBounds" : [ ], "nscanned" : 57594, "nscannedObjects" : 57594, "n" : 3, "millis" : 108 }
  • 14. Creating Indexes
  • 15. Index a field
    • db.posts.ensureIndex( { ‘name’: 1 })
    • 1 = ascending
    • -1 = descending
  • 16. Compound indexes
    • db.posts.ensureIndex({name: 1, date: -1})
  • 17. Unique Indexes
    • db.posts.ensureIndex({title: 1}, {unique: true})
  • 18. Embedded documents
    • db.posts.save({
    • title: “My First blog”,
    • comments: [
    • {author: “James”, ts : new Date()} ]
    • });
    • db.posts.ensureIndex({“ comments.author ” : 1})
  • 19. Multikeys
    • { “ tags ” : [ “ mongodb ” , “ cool ” ], ...}
    • db.posts.ensureIndex({ “ tags ” : 1})
  • 20. Covered Indexes
    • New in 1.7.4
    • Query can be resolved in index only
    • Need to exclude _id from items projected
    db.posts.ensureIndex({“title”: 1}) db.posts.find({“title”: “My blog post:}, {title: 1, _id:0}))
  • 21. Sparse Indexes
  • 22. Geospatial Indexes
  • 23. Managing Indexes
  • 24. Listing indexes db.posts.getIndexes()
  • 25. Dropping indexes db.posts.dropIndex({“tags”: 1})
  • 26. Background building db.posts.ensureIndex(..., {background: true})
  • 27. Query Planning
  • 28. Query Planning
  • 29. When isn’t an index used?
  • 30. Picking an Index scan Index on x Index on y Remember Terminate
  • 31. Review
    • Understand your workload
      • Profile your queries
      • Use explain on the slow ones
    • Create indexes for slow operations

×