mysql - How can I speed up my query? -


how can speed query? use mysql 5.1, table 'schedule' has ~ 900 k rows, , query takes more minute run:

select doc_code, `date`, time2, pat_code, status,         copiedto1, copiedto2, copiedto3, copiedto4, copiedto5 schedule 1=1 , status in (5,6,30) , (doc_code="k9" or copiedto1="k9" or copiedto2="k9"       or copiedto3="k9" or copiedto4="k9" or copiedto5="k9") , `date` between "2010/04/11" , "2011/04/11" , pat_code > 0 order `date`, doc_code, time2 

i experimented add different indexes, query doesn't want use of them. appreciated.

i change into

select s.* (    select doc_code, `date`, time2, pat_code, status,      copiedto1, copiedto2, copiedto3, copiedto4, copiedto5   schedule   status in (5,6,30)   , `date` between "2010/04/11" , "2011/04/11"   , pat_code > 0   order `date`, doc_code, time2 ) s  (s.doc_code="k9" or s.copiedto1="k9" or s.copiedto2="k9"   or s.copiedto3="k9" or s.copiedto4="k9" or s.copiedto5="k9") 

somewhere deep in mysql docs remember reading or's killing use of indexes.
have feeling going on.
if first query and's limit number of records
, select or's hope query run faster.

edit

http://forge.mysql.com/wiki/top10sqlperformancetips says: avoid using in on indexed fields, kills performance.
anyway, there many selection criteria, query optimizer not know begin.
note if query optimizer 'thinks' criterium use more 25-50% (i forgot exact percentage) of fields, no index used.

alternatively might use

select s.* (    select doc_code, `date`, time2, pat_code, status,      copiedto1, copiedto2, copiedto3, copiedto4, copiedto5   schedule   use index (someindex,someotherindex)   #<<<<-------------   status in (5,6,30)   , `date` between "2010/04/11" , "2011/04/11"   , pat_code > 0   order `date`, doc_code, time2 ) s  (s.doc_code="k9" or s.copiedto1="k9" or s.copiedto2="k9"   or s.copiedto3="k9" or s.copiedto4="k9" or s.copiedto5="k9") 

the index names or not equal fields name index indexes.
can find index names in create statement of table, or explain output goes explain select.

be carefull forcing indexes though, measure before finalize.
, remember forced index query runs fast may run slow when data in table(s) changes.


Comments

Popular posts from this blog

php - What is the difference between $_SERVER['PATH_INFO'] and $_SERVER['ORIG_PATH_INFO']? -

fortran - Function return type mismatch -

queue - mq_receive: message too long -