[英]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的引用,您說您沒有在任何表上創建任何索引。 因此,在WHERE和ON條件下使用的那些列上創建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.