LAZY
INDEXING
 matt aimonetti
     sdruby
before we start
I’m not a Database Administrator

This talk only covers MySQL


You will still need to understand indexing...
indexing
SELECT * FROM users
          WHERE last_name = 'Aimonetti';


NO INDEX
look at each row in the table, one at a t...
indexing
SELECT * FROM users
          WHERE last_name = 'Aimonetti';


INDEX
simply follows the b-tree data structure unt...
indexing
class User < ActiveRecord::Base
  has_many :team_members, :dependent => :destroy
  has_many :projects, :through =...
indexing


   how to know
   what indexes to create?
indexing                       N?
                            HE
                           W


Every time you are using o...
indexing                                  N?
                                       HE
                                   ...
T?
indexing                        HA
                              W

           EXPLAIN



  obtain information about ho...
indexing

   query-reviewer plugin
   http://code.google.com/p/query-reviewer/

       by Kongregate and David Stevenson
indexing

add an index from your migrations:
         add_index :invoices, [:client_id, :invoiced_on]




remove an index ...
indexing
 resources:



  http://code.google.com/p/query-reviewer/

  http://weblog.jamisbuck.org/2006/10/23/indexing-for-...
Upcoming SlideShare
Loading in...5
×

Lazy Indexing

2,919

Published on

Easily optimize your Rails app by adding database indexes where you need them.

Published in: Technology
1 Comment
3 Likes
Statistics
Notes
No Downloads
Views
Total Views
2,919
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
62
Comments
1
Likes
3
Embeds 0
No embeds

No notes for slide

Lazy Indexing

  1. 1. LAZY INDEXING matt aimonetti sdruby
  2. 2. before we start I’m not a Database Administrator This talk only covers MySQL You will still need to understand indexing Dubbed version of this presentation will be available from Patrick ;)
  3. 3. indexing SELECT * FROM users WHERE last_name = 'Aimonetti'; NO INDEX look at each row in the table, one at a time, to find all matching records (full table scan = SLOW)
  4. 4. indexing SELECT * FROM users WHERE last_name = 'Aimonetti'; INDEX simply follows the b-tree data structure until the Aimonetti entries have been found = WAY FASTER
  5. 5. indexing class User < ActiveRecord::Base has_many :team_members, :dependent => :destroy has_many :projects, :through => :team_members end current_user.projects SELECT `projects`.* FROM `projects` INNER JOIN team_members ON projects.id = team_members.project_id WHERE ((`team_members`.user_id = 1))
  6. 6. indexing how to know what indexes to create?
  7. 7. indexing N? HE W Every time you are using one of these associations in a model: belongs_to, has_many, has_one, or has_and_belongs_to_many association
  8. 8. indexing N? HE W ✓ use a join in your query ✓query non-foreign-key column ✓ sort on a column or combination of columns
  9. 9. T? indexing HA W EXPLAIN obtain information about how MySQL executes a SELECT statement
  10. 10. indexing query-reviewer plugin http://code.google.com/p/query-reviewer/ by Kongregate and David Stevenson
  11. 11. indexing add an index from your migrations: add_index :invoices, [:client_id, :invoiced_on] remove an index from your migrations: remove_index :invoices, [:client_id, :invoiced_on]
  12. 12. indexing resources: http://code.google.com/p/query-reviewer/ http://weblog.jamisbuck.org/2006/10/23/indexing-for-db-performance http://www.mysqlperformanceblog.com/
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×