I believe the conflict here is the OR. Try this...

select * from table
  where field1 = 'VALUE1' and field2 like 'VALUE2%'
union
select * from table
  where field3 = 'VALUE1' and field2 like 'VALUE2%'

Currently, MySql can't utilize two indexes on the same table at
the same time but it is on their list of to-do`s, this will be
a cool feature. The UNION will allow you to use both composite
indexes at the same time because it is two queries.

Ed

-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] 
Sent: Friday, July 22, 2005 6:04 AM
To: Chris Faulkner
Cc: mysql@lists.mysql.com
Subject: Re: use of indexes

The system cannot used the index on field2 because it is the second half

of the index in both cases, and it can only use indexes in order. It 
cannot use the separate indexes on field 1 and field 2 because the are 
ORred together.

If you rephrase your query

SELECT * from table 
  WHERE field2 LIKE 'VALUE2%"
    AND ((field1 = 'VALUE1') OR (field3 = 'VALUE3')) ;

it becomes obvious that an index on field2 will be used, followed by 
searches of the results field1 and field3 .

As a matter of interest, what numbers of hits do you expect on each of
the 
three terms separately? If the field2 hit is is pretty selective, it
does 
not really matter what the others do.

        Alec

Chris Faulkner <[EMAIL PROTECTED]> 
22/07/2005 12:46
Please respond to
Chris Faulkner <[EMAIL PROTECTED]>


To
mysql@lists.mysql.com
cc

Subject
Re: use of indexes

Hi 

field2 is indexed. I have 2 indexes. One is on field1 and field2, the
second indexes field3 and field2.

You mean a separate index which only indexes field2 ? Ithought that
the type of query I am doing is a good reason for doing composite
indexes.


Chris

On 7/22/05, Eugene Kosov <[EMAIL PROTECTED]> wrote:
> Chris Faulkner wrote:
> > HI
> >
> > I have a query like this
> >
> > select * from table where (
> > ( field1 = 'VALUE1' and field2 like 'VALUE2%' )
> > OR
> > ( field3 = 'VALUE1' and field2 like 'VALUE2%' )
> > )
> >
> > I have created two composite indexes - one on field1 + field2 and
one
> > on field3 + field2. Explain on the SQL indicates that the indexes
are
> > possibly used. The query takes an age to run and looking at my log
> > indicates a full table scan.
> >
> > I have also tried indexing just field1 and field3 separately but
this
> > doesn't help. I have run an analyze.
> >
> > Chris
> >
> 
> Mysql use an index only if indexed field(s) present(s) in both OR 
arguments..
> Sorry, but i can't find it in docs right now, so i can't give you any 
helpful link.
> 
> I think index on field2 may help you here..
> 
>
-- 
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]

Reply via email to