2013-12-16 1 views
-1

10 초 이상 실행되는 쿼리가 있습니다. 다음 쿼리를 즉석에서 수행 할 수있는 몇 가지 제안을하십시오!MYSQL에서 유니온 최적화하기

CREATE TABLE uem_map_user_event (
    id INT(11) , uem_user_id INt(10),uem_event_type_id INT(11), 
    uem_entry_date DATETIME ,INDEX urt_user_id (uem_user_id)); 

    CREATE TABLE evy_mst_event_type (id INT(11) , evy_description VARCHAR(45), 
    evy_event_family_id INT(11),PRIMARY KEY (id)); 

CREATE TABLE uft_map_user_clnt (
    id INT(11) ,uft_user_id INT(11) ,uft_clnt_id INT(11) ,uft_eff_frmdt DATETIME , 
    uft_eff_todt DATETIME ,uft_add_userid INT(11) ,uft_mod_userid INT(11)); 

select * from (
select u.id as id,evy.description as 'Work Description',count(*) as Pending 
from user_event u 
join event_type evy on evy.id = u.event_type_id 
join (select fun.eventtypeid ,fun.client_id ,uft.user_id 
from vw_fund_queue fun 
join uft_clnt uft on uft.uft_clnt_id = fun.client_id 
) evt on evy.id = evt.eventtypeid 
and u.user_id = evt.user_id 
where evy.id = 1601 and u.user_id = 10061 

union all 

select u.id as id,evy.description as 'Work Description',count(*) as Pending 
from user_event u 
join event_type evy on evy.id = u.event_type_id 
join (select fun.eventtypeid ,fun.client_id ,uft.user_id 
from vw_fund_confirm fun 
join uft_clnt uft on uft.uft_clnt_id = fun.client_id 
) evt on evy.id = evt.eventtypeid 
and u.user_id = evt.user_id 
where evy.id = 1201 and u.user_id = 10061 

union all 

select u.id as id,evy.description as 'Work Description',count(*) as Pending 
from user_event u 
join event_type evy on evy.id = u.event_type_id 
join (select fun.eventtypeid ,fun.client_id ,uft.user_id 
from vw_fund_approve fun 
join uft_user_clnt uft on uft.clnt_id = fun.client_id 
) evt on evy.id = evt.eventtypeid 
and uem.user_id = evt.user_id 
where evy.id = 1202 and u.user_id = 10061) a where a.pending!=0 
+0

조차 질문, 단지 명령을? – Nanne

+1

한계 1을 사용하면 정확히 하나의 레코드를 찾을 수 있습니다. –

+0

'EXPLAIN EXTENDED'기능을 사용해보십시오. – DaSourcerer

답변

1

이 시도 : 제안을 제공하기 위해

SELECT u.id AS id,evy.description AS 'Work Description', COUNT(1) AS Pending 
FROM user_event u 
JOIN event_type evy ON evy.id = u.event_type_id 
JOIN (SELECT fun.eventtypeid ,fun.client_id ,uft.user_id 
     FROM vw_fund_queue fun 
     JOIN uft_clnt uft ON uft.uft_clnt_id = fun.client_id 
     WHERE fun.eventtypeid = 1601 AND uft.user_id = 10061 
    UNION ALL 
     SELECT fun.eventtypeid ,fun.client_id ,uft.user_id 
     FROM vw_fund_confirm fun 
     JOIN uft_clnt uft ON uft.uft_clnt_id = fun.client_id 
     WHERE fun.eventtypeid = 1201 AND uft.user_id = 10061 
    UNION ALL 
    SELECT fun.eventtypeid ,fun.client_id ,uft.user_id 
    FROM vw_fund_approve fun 
    JOIN uft_user_clnt uft ON uft.clnt_id = fun.client_id 
    WHERE fun.eventtypeid = 1202 AND uft.user_id = 10061 
    ) evt ON evy.id = evt.eventtypeid AND u.user_id = evt.user_id 
GROUP BY evy.id HAVING pending != 0 
+0

귀중한 답변을 주셔서 감사합니다! –

+0

당신이 가장 환영합니다. –