簡體   English   中英

我需要優化以下SQL查詢

[英]i need to optimize the following sql query

我需要優化以下sql查詢,因為我一直在等待過去45分鍾才能執行。

    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。

這是您正在加載的數據的好選擇。 這將需要一些時間。 以下相同的問題可能對您有幫助

http://www.mysqlperformanceblog.com/2008/07/03/how-to-load-large-files-safely-into-innodb-with-load-data-infile/

關於性能的另一個鏈接

http://www.mysqlperformanceblog.com/2008/07/03/how-to-load-large-files-safely-into-innodb-with-load-data-infile/

我認為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         |
+--------+------------+----------------+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM