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
Post a Comment