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