2015-07-28 2 views
-4
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 
+3

Пожалуйста, приложите немного усилий для форматирования запроса. Он не читается. –

+0

Я не понял запрос форматирования, на самом деле это мой первоначальный запрос, который я запускаю, и это замедляет почему ..........? –

+0

@ChandanKumar: [Перейдите по этой ссылке] (http://stackoverflow.com/help/how-to-ask) – Wanderer

ответ

0

Не используйте LEFT, когда он вам не нужен.

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

LEFT говорит держать отсутствующие строки из OQ; но затем AND выкинет любые отсутствующие строки.

Изменить

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 

в

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 

Таким образом, оптимизатор может быть в состоянии сделать GROUP BY, ORDER BY и LIMIT все очень efficien используя INDEX.

Пожалуйста, измените ваш вопрос включить

SHOW CREATE TABLE -- for each table 
EXPLAIN SELECT ...; 

С теми, мы можем обойтись немного больше советов/злоупотребления.

0

Не полный ответ, но, надеюсь, некоторые полезные советы:

Используйте EXPLAIN, чтобы выяснить, как хорошо ваш запрос выполняется.

Убедитесь, что все поля, к которым вы подключаетесь, индексируются, просто ли они являются первичным ключом или иным образом. Иногда индексирование некоторых полей, упомянутых в предложении WHERE, также может повысить скорость вашего запроса.

Возможно, вы также захотите изменить порядок своих JOIN; похоже, что ваш первый шаг должен состоять в том, чтобы получить записи OQA, поскольку они вернут очень ограниченный набор.

Это OQ.query_date поле 'date' или поле 'datetime'? Если первое, вам может не понадобиться использовать дату() вокруг него. Если по какой-либо причине он определен как VARCHAR, измените его на поле даты.

Смежные вопросы