簡體   English   中英

減少mysql查詢的執行時間

[英]reducing the mysql query execution time

SELECT mt.Test_ID,
       mtp.Test_Plan_Doc_No,
       mp.Group_Name,
       mp.Point_Name,
       mp.Limit_1,
       mp.Limit_2,
       mp.Datatype,
       mt.Start_Date,
       mv.Measurement_Value,
       mv.Status_Value
FROM   measurement_test mt
       INNER JOIN measurement_values mv
               ON mt.Test_ID = mv.Test_ID
       INNER JOIN measurement_point mp
               ON mv.Point_ID = mp.Point_ID
       INNER JOIN measurement_test_plan mtp
               ON mtp.Test_ID = mt.Test_ID
WHERE  mtp.Test_Plan_Doc_No IN ( 'test1', 'test2' )
       AND mp.Group_Name = 'gp_name'

大家好。

上面是我正在執行以創建視圖的查詢。

但是我有一個問題如下:

測量值表大約有8200萬行。 測量點表大約有500萬行測量測試計划,而測量測試表大約有9000-100000行。

我的問題是,當我執行上述查詢時,執行時間為8分鍾,而生成的結果只有400行。

有什么辦法可以減少上述查詢的執行時間?

注意:我在網頁中使用上面的查詢

首先,為了進行有效的join ,您應該按增加的行數順序保留表。 這樣可以大大減少行掃描的次數。 因此,對於您的查詢, join順序應為measurement_test mt natural join measurement_point mp natural join measurement_values mv 還要確保聯接列上定義了索引,並且它們具有完全相同的數據類型。 char(15)varchar(15)在MySQL中被認為是相似的,但char(15)varchar(10)卻不一樣。

來自您@comment的引用,您說您沒有在任何表上創建任何索引。 因此,在WHEREON條件下使用的那些列上創建CREATE INDEX

在你的情況下創建索引

mt.Test_ID, 
mv.Test_ID, 
mv.Point_ID,
mp.Point_ID, 
mtp.Test_ID ,
mp.group_name ,
mtp.Test_Plan_Doc_No

在這里,我重寫您的查詢:

SELECT mt.Test_ID,
       mtp.Test_Plan_Doc_No,
       mp.Group_Name,
       mp.Point_Name,
       mp.Limit_1,
       mp.Limit_2,
       mp.Datatype,
       mt.Start_Date,
       mv.Measurement_Value,
       mv.Status_Value
FROM   measurement_test mt
       INNER JOIN measurement_values mv USING(Test_ID)            
       INNER JOIN measurement_point mp USING (Point_ID)
       INNER JOIN measurement_test_plan mtp USING(Test_ID)
WHERE  mtp.Test_Plan_Doc_No IN ( 'test1', 'test2' )
       AND mp.Group_Name = 'gp_name'

確保在WHERE子句中使用的每個列都有正確的索引。

您可以使用查詢分析器查看是否使用了索引。

暫無
暫無

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

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