簡體   English   中英

mysql查詢執行耗時

[英]mysql query execution consuming time

我在SO中看到了幾個問題,並且在此基礎上,我還改進了sql查詢。 但有時需要12秒,或者有時需要3秒才能執行。 所以最短的時間我們可以3秒。 查詢就是這樣

SELECT ANALYSIS.DEPARTMENT_ID
    ,SCORE.ID
    ,SCORE.KPI_ SCORE.R_SCORE
    ,SCORE.FACTOR_SCORE
    ,SCORE.FACTOR_SCORE
    ,SCORE.FACTOR_SCORE
    ,SCORE.CREATED_DATE
    ,SCORE.UPDATED_DATE
FROM SCORE_INDICATOR SCORE
    ,AG_SENTIMENT ANALYSIS
WHERE SCORE.TAG_ID = ANALYSIS.ID
    AND ANALYSIS.ORGANIZATION_ID = 1
    AND ANALYSIS.DEPARTMENT_ID IN (1,2,3,4,5)
    AND DATE (ANALYSIS.REVIEW_DATE) BETWEEN DATE ('2016-05-02') AND DATE ('2017-05-02')
ORDER BY ANALYSIS.DEPARTMENT_ID

現在一個表SCORE_INDIACATOR有19345116,后來共有19057025行。 和我加上索引ORGANIZATION_IDdepartment_id和另一個作為組合ORGANIZATION_ID and department_id 還有其他方法可以改善它嗎?或者我可以用此數量的數據實現最大數量?

這是清單:

1)確保日志表( ANALYSIS )使用MyISAM引擎(對於OLAP查詢來說這是快速的)。

2)確保您已為ANALYSIS.REVIEW_DATE字段建立索引。

3)確保ANALYSIS.REVIEW_DATEDATE類型(不是CHARVARCHAR

4)變更查詢(重新安排查詢計划):

SELECT 
    ANALYSIS.DEPARTMENT_ID
    ,SCORE.ID
    ,SCORE.KPI_ SCORE.R_SCORE
    ,SCORE.FACTOR_SCORE
    ,SCORE.FACTOR_SCORE
    ,SCORE.FACTOR_SCORE
    ,SCORE.CREATED_DATE
    ,SCORE.UPDATED_DATE
FROM SCORE_INDICATOR SCORE
    ,AG_SENTIMENT ANALYSIS
WHERE 
    SCORE.TAG_ID = ANALYSIS.ID 
  AND
    ANALYSIS.REVIEW_DATE >= '2016-05-02' AND ANALYSIS.REVIEW_DATE < '2016-05-03'
  AND
    ANALYSIS.ORGANIZATION_ID = 1
  AND 
    ANALYSIS.DEPARTMENT_ID IN (1,2,3,4,5)
ORDER BY ANALYSIS.DEPARTMENT_ID;

我已經將順序和樣式更改為JOIN語法。 得分表似乎是分析表的主要標准的子級。 您的所有條件均基於合格的分析記錄。 現在,建立索引。 通過對列執行DATE()函數調用不會對優化器有所幫助。 因此,為了獲取所有可能的日期/時間組成部分,我已從> =轉換為第一個日期,到結束后不到一天。 在您的示例中,DATE('2017-05-02')與LESS相同,而'2017-05-03'則包含2017-05-02到23:59:59,並且可以更好地應用日期。

現在為索引。 根據字段進行連接和排序的復合索引可能會有所幫助

AG_Segment表...索引打開(Organization_ID,Department_ID,Review_Date,ID)

SELECT 
        ANALYSIS.DEPARTMENT_ID,
        SCORE.ID,
        SCORE.KPI_ SCORE.R_SCORE,
        SCORE.FACTOR_SCORE,
        SCORE.FACTOR_SCORE,
        SCORE.FACTOR_SCORE,
        SCORE.CREATED_DATE,
        SCORE.UPDATED_DATE
    FROM 
        AG_SENTIMENT ANALYSIS
            JOIN SCORE_INDICATOR SCORE
                ON ANALYSIS.ID = SCORE.TAG_ID
    where 
            ANALYSIS.ORGANIZATION_ID = 1
        AND ANALYSIS.DEPARTMENT_ID IN (1,2,3,4,5)
        AND ANALYSIS.REVIEW_DATE >= '2016-05-02'
        AND ANALYSIS.REVIEW_DATE < '2017-05-03'
    ORDER BY 
        ANALYSIS.DEPARTMENT_ID

暫無
暫無

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

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