2013-12-20 83 views
0

我需要優化以下sql查詢,因爲我一直在等待它的過去45分鐘執行。我需要優化以下sql查詢

create database comparelogs; 
    use comparelogs; 
    create table compare(field varchar(1080)); 

    load data local infile 'c:/path/text.txt' 
    into table compare 
    lines terminated by '\n'; 

以下查詢是消耗時間的查詢。

SELECT 
    field, 
    (SELECT COUNT(*) FROM compare T2 WHERE T2.field = T1.field) AS Count, 
    @row_num := if(@prev_value=field,@row_num+1,1) as Occurrence, 
    @prev_value := field as previous_value 
    FROM compare T1 
    order by field; 

    input data:(from text.txt file) 
    /Jols/AAP/AAP.36/Ads\AdS_7.75x10_1.29.75_k 
    /Jols/AAP/AAP.36/Ads\PhyJobPl4x1034_BW_1.5.pdf 
    /Jls/AAP/AAP.36Ads\Cusins BW_rint_FPbw_1.3.pdf 
    /Jouals/AAP/AAP.36Ads\GeneryjWebdBW_1.6.pdf AAR356BF 
    /Jals/AAP/AAP.36Ads\GeneralWyjyjyAW_1.6.pdf AAR356BF 
    /Jls/AAP/AAP.36Ads\XtraCredit filler ad - PROPRIETARY ONLY_4C_1.0.pdf 
    /Jos/AAP/AAP.36Ads\AAP_May-Jun_10_Havel's_EchoBlock_1.0.pdf 
    /Jls/AAP/AAP.36//As\Roc76SolidAdbw_1.0.pdf 
    /Jls/AAP/AAP.36//A\RAPM_fi7ul ad_BW_1.0.pdf 
    /Jls/AAP/AAP.36/As\AAP_1_11_Bjhkytaun_Dyjidance_1.0.pdf 
    /Jls/AAP/AAP.36/s\AAPyjs36_yj.2.pdf 
    ..........................................upto 200000 records. 

它已經超過45分鐘,它仍在執行,我怎麼能優化這個來快速得到結果。 我正在使用mysql56。

回答

0

我認爲MySQL正在執行SELECT聲明另一個鏈接。爲什麼不運行SHOW PROCESSLIST(我認爲使用LOAD DATA INFILE加載200k行不會花費很長時間。)

根據我的經驗,MySQL中相關的子查詢非常緩慢。你可以試試嗎?

您可以在這裏測試。 http://www.sqlfiddle.com/#!2/ebcfe/7

SET @row_num := 0; 
SET @prev_value := ''; 

SELECT field, 
    @row_num := if(@prev_value=field,@row_num+1,1) as Occurrence, 
    @prev_value := field as previous_value 
FROM 
(
    SELECT 
     T1.field, cnt 
    FROM compare T1 INNER JOIN 
     (
      SELECT field, COUNT(*) AS cnt 
      FROM compare 
      GROUP BY field 
     ) AS T2 ON T1.field = T2.field 
    ORDER BY T1.field 
) x; 
+--------+------------+----------------+ 
| field | Occurrence | previous_value | 
+--------+------------+----------------+ 
| field1 |   1 | field1   | 
| field2 |   1 | field2   | 
| field2 |   2 | field2   | 
| field3 |   1 | field3   | 
| field3 |   2 | field3   | 
| field3 |   3 | field3   | 
| field4 |   1 | field4   | 
| field4 |   2 | field4   | 
| field4 |   3 | field4   | 
| field4 |   4 | field4   | 
+--------+------------+----------------+ 
+0

時遇到問題:錯誤代碼:1052.字段列表中的列'字段不明確 – user3111030

+0

@ user3111030對不起。我已更新。 –

+0

建議使查詢更快,看起來您的表沒有主鍵。請添加一個,然後在此處連接時使用主鍵「ON T1.field = T2.field」。這會提高你的表現。 –