【问题标题】:Optimizing Union All in MYSQL在MYSQL中优化Union All
【发布时间】:2014-01-03 14:35:51
【问题描述】:

我有一个执行超过 10 秒的查询。请提供一些建议来即兴以下查询!

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

【问题讨论】:

  • 甚至不是一个问题,只是一个提供建议的命令?
  • 使用限制 1,您知道找到了一条记录
  • 试试EXPLAIN EXTENDED的力量。

标签: mysql sql performance select query-optimization


【解决方案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

【讨论】:

  • 感谢 shah 的宝贵回答!
猜你喜欢
  • 2021-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多