Mysql 这个查询不能快速执行,为什么?

Mysql 这个查询不能快速执行,为什么?,mysql,performance,Mysql,Performance,这不是一个完整的答案,但希望有一些有用的提示: 使用EXPLAIN计算查询的执行情况 检查您要加入的所有字段是否都已编制索引,无论是否只是主键。有时,为WHERE子句中提到的一些字段编制索引也可以提高查询速度 您可能还需要重新排序联接;看起来您的第一步应该是获取OQA记录,因为它们将返回非常有限的集合 OQ.query_日期是“日期”字段还是“日期时间”字段?如果是前者,则可能不需要在其周围使用date()。如果出于某种原因将其定义为VARCHAR,请将其更改为日期字段。不需要时不要使用LEFT

这不是一个完整的答案,但希望有一些有用的提示:

使用EXPLAIN计算查询的执行情况

检查您要加入的所有字段是否都已编制索引,无论是否只是主键。有时,为WHERE子句中提到的一些字段编制索引也可以提高查询速度

您可能还需要重新排序联接;看起来您的第一步应该是获取OQA记录,因为它们将返回非常有限的集合


OQ.query_日期是“日期”字段还是“日期时间”字段?如果是前者,则可能不需要在其周围使用date()。如果出于某种原因将其定义为VARCHAR,请将其更改为日期字段。

不需要时不要使用
LEFT

select 
  OQSP.query_id as quries_id, 
  OQA.allocation_date_time,
  OQA.submitted_date_time,
  OQA.comment,
  OQ.*,
  p.pnr_no,
  p.pnr_generated_time,
  p.mail_status,
  p.exp_mail_status,
  p.time_validity,
  p.payment_status,
  p.payment_type 
from online_query_submit_option OQSP 
left join online_query_allocation OQA on OQSP.query_id= OQA.alloted_query_id 
left join online_queries OQ on OQSP.query_id= OQ.query_id 
left join pnr_quries as p on p.query_id=OQ.query_id 
where 
1=1 
and (OQ.confirm IS NULL OR OQ.confirm='') 
and (OQ.dead IS NULL OR OQ.dead='') 
and (OQ.running IS NULL OR OQ.running='' 
OR OQ.running='running') 
and OQA.assigned_executive='swatijoshi' 
and OQA.exec_del_status=0 
and OQ.admin_del_status=0 
and OQA.submitted_query=1 
AND date(OQ.query_date)='2015-07-28' 
group by OQSP.query_id 
order by OQ.query_date DESC,OQSP.query_id DESC 
limit 0,5 
左边的
表示保留OQ中缺少的行;但是,
将丢弃任何缺少的行

改变

left join online_queries OQ on OQSP.query_id= OQ.query_id ...
AND date(OQ.query_date)='2015-07-28' 

这样,优化器就可以使用
索引非常有效地执行
分组依据
排序依据
、以及
限制

请编辑您的问题以包括

INDEX(query_date, query_id)  -- to OQ

有了这些,我们可以提供更多的建议/滥用。

请在设置查询格式方面下功夫。这是不可读的。我不理解格式化查询,实际上这是我运行的原始查询,这是为了降低速度…………?@ChandanKumar:您将三个表与第一个表连接起来,这些表可能有大量数据,除此之外还有太多的条件(不是什么不正常的事情,但它会影响性能)在where子句中。这实际上会减慢您的查询速度。我在where子句中有很多重要的条件。我如何加快此查询速度?是否还有其他解决方案
AND OQ.query_date >= '2015-07-28'
AND OQ.query_date  < '2015-07-28' + INTERVAL 1 DAY
group by OQ.query_date,
         OQ.query_id          -- added to match the ORDER BY
order by OQ.query_date DESC,
         OQ.query_id DESC     -- same as OQSP
limit 0,5 
INDEX(query_date, query_id)  -- to OQ
SHOW CREATE TABLE -- for each table
EXPLAIN SELECT ...;