I would assume it would use reporting_id_t, since the WHERE clause has both a.a_id and a.timestamp in it.
____________________________________________________________ Eamon Daly ----- Original Message ----- From: "gerald_clark" <[EMAIL PROTECTED]> To: "Eamon Daly" <[EMAIL PROTECTED]> Cc: <[EMAIL PROTECTED]> Sent: Thursday, July 29, 2004 8:04 AM Subject: Re: JOIN/WHERE and index confusion > Why should it use any other? > Timestamp is the only field in the where clause, and you are selecting > all fields. > The second index would require more index reads, and the third can't be used > to satisfy the where clause. > > Eamon Daly wrote: > > >Okay, now I'm even /more/ confused. I whittled everything > >down like so: > > > >CREATE INDEX reporting_t ON a (timestamp); > >CREATE INDEX reporting_t_id ON a (timestamp, a_id); > >CREATE INDEX reporting_id_t ON a (a_id, timestamp); > > > >EXPLAIN > >SELECT * > >FROM a, b > >WHERE > >a.a_id = b.a_id AND > >a.timestamp BETWEEN 20040101000000 AND 20040101235959 > > > >and it /still/ only uses reporting_t! What the heck am I > >missing? > > > >____________________________________________________________ > >Eamon Daly > > > > > > > >----- Original Message ----- > >From: "Eamon Daly" <[EMAIL PROTECTED]> > >To: <[EMAIL PROTECTED]> > >Sent: Wednesday, July 28, 2004 10:58 AM > >Subject: JOIN/WHERE and index confusion > > > > > > > > > >>Hi, all. I think I'm misunderstanding something basic about > >>indexes. I have a SELECT like so: > >> > >>SELECT * > >>FROM a > >>LEFT JOIN b ON a.a_id = b.a_id > >>JOIN c ON a.c_id = c.c_id > >>JOIN d ON c.d_id = d.d_id > >>JOIN e ON c.e_id = e.e_id > >>WHERE a.timestamp BETWEEN 20040101000000 AND 20040101235959 > >>GROUP BY c.d_id, c.e_id > >> > >>All of the id fields are primary indexes. I've already > >>created an index on a.timestamp, and that works all right. > >>I tried creating an index on a for the SELECT: > >> > >>KEY `reporting` (`a_id`,`c_id`,`timestamp`) > >> > >>and an index on c for the GROUP BY: > >> > >>KEY `reporting` (`c_id`,`d_id`,`e_id`) > >> > >>But EXPLAIN shows that MySQL isn't even considering the key > >>on a, and chooses the primary key on c over my index. > >>Clearly I'm confused about how indexes are used in a > >>JOIN/WHERE situation: can anyone enlighten me? > >> > >>____________________________________________________________ > >>Eamon Daly > >> > >> > >> > >>-- > >>MySQL General Mailing List > >>For list archives: http://lists.mysql.com/mysql > >>To unsubscribe: > >> > >> > >http://lists.mysql.com/[EMAIL PROTECTED] > > > > > > > > > > > > > > > > -- > MySQL General Mailing List > For list archives: http://lists.mysql.com/mysql > To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED] > -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]