[drupal-devel] MySQL indices not being picked up

Daniel Convissor danielc at analysisandsolutions.com
Sun May 15 13:58:41 UTC 2005


Dries:

On Sun, May 15, 2005 at 01:40:30PM +0200, Dries Buytaert wrote:
> Does anyone know why MySQL does not use indices/keys for the following  
> query despite the fact it has plenty of indices to choose from ...

Without looking at this too hard and not having the actual table 
definitions in front of me...  I noticed some of the columns used in the 
joins are part of multi-column indexes.  When querying columns that are in 
a multi-column index, one can't reach a column in the middle without using 
the preceeding columns.  Example:

   create index foo on bar (one, two, three);

If you try to join/select/etc on column "two", the index can't be used.  
The index only gets used if your query involves the prior columns.  The 
key gets used for these:
   select * from foo where one = 11
or
   select * from foo where one = 11, two = 22
or 
   select * from foo where one = 11, two = 22, three = 33

BUT, the index won't get used on these:
   select * from foo where two = 22
or
   select * from foo where two = 22, three = 33
or
   select * from foo where three = 33


So, the order you define the index in is important.  One must to take into 
consideration how the index will be used.  If two columns in the index are 
subjects of frequent queries, but the second column sometimes not used in 
conjunction with the first, a separate index comprised of that column 
alone should be considered.

I hope my explanation is clear.  Perhaps you already knew this.  Is that 
the issue here?

--Dan

-- 
 T H E   A N A L Y S I S   A N D   S O L U T I O N S   C O M P A N Y
            data intensive web and database programming
                http://www.AnalysisAndSolutions.com/
 4015 7th Ave #4, Brooklyn NY 11232  v: 718-854-0335 f: 718-854-0409



More information about the drupal-devel mailing list