Re: UNION in JDBC - WAS Re: use of indexes

2005-07-27 Thread Gleb Paharenko
Hello.



Check with SHOW PROCESSLIST in which state MySQL thread which performs

the query is. See:

  http://dev.mysql.com/doc/mysql/en/show-processlist.html







Chris Faulkner [EMAIL PROTECTED] wrote:

 Hello again

 

 Following on from this index question, the UNION worked. From a normal

 mysql client, it was returning my results sub-second. I am actually

 executing this over JDBC, using mysql-connector j.

 

 WHen I put the SQL into my Java program - it takes a minute or so. I

 am logging the SQL and if I copy and paste it into my mysql client, it

 is fast. I can execute the query first in mysql and then in the JDBC

 client and I get the same so it is not caching. I've done a bit of

 searching but found nothing - any ideas ?

 

 

 Chris

 

 On 7/22/05, Chris Faulkner [EMAIL PROTECTED] wrote:

 That was exactly the problem. Thanks. MySQL can't use two indexes on

 the same table at the same time. Thanks for the other suggestions but

 I'll use this workaround.

=20

 Chris

=20

 On 7/22/05, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:

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

 

  select * from table

where field1 =3D 'VALUE1' and field2 like 'VALUE2%'

  union

  select * from table

where field3 =3D '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 hal=

 f

 

  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 =3D 'VALUE1') OR (field3 =3D '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 =3D 'VALUE1' and field2 like 'VALUE2%' )

OR

( field3 =3D '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]

 gmail.com

 

 



 



-- 
For technical support contracts, goto https://order.mysql.com/?ref=ensita
This email is sponsored by Ensita.NET http://www.ensita.net/
   __  ___ ___   __
  /  |/  /_ __/ __/ __ \/ /Gleb Paharenko
 / /|_/ / // /\ \/ /_/ / /__   [EMAIL PROTECTED]
/_/  /_/\_, /___/\___\_\___/   MySQL AB / Ensita.NET
   ___/   www.mysql.com




-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:http://lists.mysql.com/[EMAIL PROTECTED]



UNION in JDBC - WAS Re: use of indexes

2005-07-24 Thread Chris Faulkner
Hello again

Following on from this index question, the UNION worked. From a normal
mysql client, it was returning my results sub-second. I am actually
executing this over JDBC, using mysql-connector j.

WHen I put the SQL into my Java program - it takes a minute or so. I
am logging the SQL and if I copy and paste it into my mysql client, it
is fast. I can execute the query first in mysql and then in the JDBC
client and I get the same so it is not caching. I've done a bit of
searching but found nothing - any ideas ?


Chris

On 7/22/05, Chris Faulkner [EMAIL PROTECTED] wrote:
 That was exactly the problem. Thanks. MySQL can't use two indexes on
 the same table at the same time. Thanks for the other suggestions but
 I'll use this workaround.
 
 Chris
 
 On 7/22/05, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:
  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]
 
 


--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:http://lists.mysql.com/[EMAIL PROTECTED]