【问题标题】:How to optimize 3 inner join mysql query?如何优化 3 内连接 mysql 查询?
【发布时间】:2015-09-19 03:14:33
【问题描述】:

我需要执行 3 表连接才能获得我想要的结果。该查询需要 20 秒才能执行,这对我的应用程序来说是不可接受的。

SELECT DISTINCT test.ORDER.PLANT_NAME FROM test.ORDER
INNER JOIN test.LOAD
    ON test.ORDER.ORDER_CODE = test.LOAD.ORDER_CODE 
    AND test.ORDER.ORDER_DATE = test.LOAD.ORDER_DATE
    AND test.ORDER.PROD_CODE = test.LOAD.PROD_CODE
    AND test.ORDER.REMOVE_RSN_CODE = test.LOAD.REMOVE_RSN_CODE
INNER JOIN test.TRUCK
    ON test.TRUCK.truck_code = test.LOAD.TRUCK_CODE
    AND test.TRUCK.hler_code = "4000584"
ORDER BY PLANT_NAME ASC;

这里是解释:

 '1','SIMPLE','ORDER','ALL',NULL,NULL,NULL,NULL,'4511','Using temporary; Using filesort'
 '1','SIMPLE','TRUCK','ALL',NULL,NULL,NULL,NULL,'10100','Using where; Distinct; Using join buffer'
 '1','SIMPLE','LOAD','ALL',NULL,NULL,NULL,NULL,'13452','Using where; Distinct; Using join buffer'

有人对如何优化具有这么多内部连接的查询有任何想法吗?

【问题讨论】:

  • 不知道这些表之间的结构和关系,没有好办法知道。

标签: mysql sql join


【解决方案1】:
SELECT DISTINCT test.ORDER.PLANT_NAME FROM test.ORDER INNER JOIN test.LOAD ON test.ORDER.ORDER_CODE = test.LOAD.ORDER_CODE AND test.ORDER.ORDER_DATE = test.LOAD.ORDER_DATE AND test.ORDER.PROD_CODE = test.LOAD.PROD_CODE AND test.ORDER.REMOVE_RSN_CODE = test.LOAD.REMOVE_RSN_CODE INNER JOIN test.TRUCK ON test.TRUCK.truck_code = test.LOAD.TRUCK_CODE WHERE test.TRUCK.hler_code = "4000584" ORDER BY PLANT_NAME ASC;

这应该对您帮助不大,但请尝试对列进行索引。

【讨论】:

  • 我现在正在研究列索引,非常感谢。
  • 它就像一个魅力。哇。我已经索引了两列并将处理时间从 20 秒减少到 1.2 秒。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-04
  • 2020-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多