mysql - 减少 mysql 查询执行时间

标签 mysql

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'

大家好。

以上是我正在执行以创建 View 的查询。

但是我有一个问题如下:

测量值表有大约 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)

关于mysql - 减少 mysql 查询执行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12155789/

相关文章:

php - 在 1 个查询中对 Sum & Count 列求和或使用 PHP?

mysql - 获取最近 30 天的记录

带条件的 PHP MySQL WHERE 子句

mysql - 如何为 go-sqlmock 正确设置 Mock Row 和 Query

mysql - 将大于和小于的 SQL 查询合并为一个

mysql - SELECT COUNT 查询在 MySQL 中抛出错误

c# - 使用 MySQL 和 ASP.NET MVC 的池

php - 使用 slug 从 mysql 中获取文章

c# - 按定义的顺序返回匹配的 SQL 结果?

php - 如何使用 jQuery/AJAX 在主窗体中提交 iframe 子窗体?