2013-08-02 39 views
0

为什么在UNION关键字查询中运行非常慢的mysql?用UNION关键字查询在mysql中运行速度非常慢

我已经使用UNION关键字创建了一个查询,但每次执行它时,显示输出都需要很长时间。

这是我使用的查询。

SELECT process_trained AS Training_Title, 
    org_party AS Organizing_Party, 
    duration AS Duration, 
    Concat(Date_format(sptrain_from, '%d-%b-%y'), " to ", 
    Date_format(sptrain_to, '%d-%b-%y'), "") AS SpecialTraining_Date, 
    trainor AS Trainor, 
    category AS Category, 
    training_type AS Training_Type, 
    train_id, 
    Date_format(cert_date, '%d-%b-%Y') AS Date_Certified, 
    Date_format(re_certdate, '%d-%b-%Y') AS Re_Certificaton, 
    remarks, 
    filename 
FROM(SELECT *, 
       cert_date AS cdate 
     FROM tbldirtraining 
     UNION ALL 
     SELECT *, 
       sptrain_from 
     FROM tbldirtraining) jes 
WHERE emp_id = '6555' 
     AND cdate <> '' 
ORDER BY cdate; 

是否有任何可能的方法可以帮助如何更快地运行此查询。

在此先感谢。

+0

你能告诉执行计划? –

+0

'tbldirtraining'中有多少行?另外,你为什么要把桌子与自己结合起来? – Sebas

+0

@Sebas ...总而言之,在tbldirtraining中有2053行,正如你所看到的,上面的查询我使用了WHERE子句来指定查询显示的训练细节。所以身份证号码6555必须显示13行,因为他有13次训练,但是每次使用UNION或UNION ALL时,结果都是重复的行,所以不是13而是13,它变成了26,这就是为什么我把条件'WHERE cdate <>'' '其中cdate是我用于两个联合行的ALIAS。我将一个列合并到一个表中,这些列是日期列,并且它们必须同时排序。 –

回答

0

试试这个

 SELECT process_trained AS Training_Title, 
org_party AS Organizing_Party, 
duration AS Duration, 
Concat(Date_format(sptrain_from, '%d-%b-%y'), " to ", 
Date_format(sptrain_to, '%d-%b-%y'), "") AS SpecialTraining_Date, 
trainor AS Trainor, 
category AS Category, 
training_type AS Training_Type, 
train_id, 
Date_format(cert_date, '%d-%b-%Y') AS Date_Certified, 
Date_format(re_certdate, '%d-%b-%Y') AS Re_Certificaton, 
remarks, 
filename 
FROM tbldirtraining 
WHERE emp_id = '6555' 
AND cert_date <> '' 
ORDER BY cert_date desc,sptrain_from asc; 
+0

我已经尝试过这个查询,但输出只按cert_date排序,我想要的是通过cert_date和sptrain_from对它进行排序。就像这样 - 当cert_date是2011-01-25,2011-02-01,sptrain_from是2011-01-22,2013-08-02时,输出必须按如下排序:2011-01-22, 2011-01-25,2011-02-01,2013-08-02。 –

+0

我没有帮助,如果你添加'sptrain_from'命令由我编辑? –

+0

ahm。其实先生不是,因为我已经尝试过那个,结果不是我期待的那个。但无论如何,感谢您提供的帮助:先生:-) –