【问题标题】:SQL takes 2min to perform querySQL 执行查询需要 2 分钟
【发布时间】:2016-01-05 18:13:06
【问题描述】:

正如标题所说。我有一个大约需要 2 分钟才能执行的 SQL 问题。 SQL 问题如下所示:

SELECT *,
(SELECT (CASE WHEN `Grupp_ID` > 0 THEN `Grupp_Name` ELSE  `Customers`.`Customer` END) AS `Cust` FROM `Customers` WHERE `Customers`.`ID` = `ordrar`.`CustomerNr`) AS `GruppName`,
(SELECT SUM(REPLACE(`Hours`,',','.')) FROM `anarbetstid` WHERE `order` = `ordrar`.`order`) AS `Hours`,
(SELECT SUM(REPLACE(`Amount`,',','.')) FROM `Resa` WHERE `order` = `ordrar`.`order`) AS `Resor`,
(SELECT COUNT(*) FROM `anmaterial` WHERE `Order` = `ordrar`.`order`) AS `Material`,
(SELECT SUM(REPLACE(`Hours`,',','.') * (SELECT REPLACE(`TimePrice`,',','.') FROM `Arbetstid` WHERE `TimeCode` = `anarbetstid`.`TimeCode`)) FROM `anarbetstid` WHERE `order` = `ordrar`.`order`) AS `TimmarSum`,
(SELECT SUM(REPLACE(`Antal`,',','.') * (SELECT REPLACE(`Price`,',','.') FROM `reselist` WHERE `ID` = `Resa`.`Restyp`)) FROM `Resa` WHERE `order` = `ordrar`.`order`) AS `ResorSum`,
(SELECT CASE `palagg` WHEN 0 THEN SUM((REPLACE(`Rabatt`,',','.') * REPLACE(`Price`,',','.')) * REPLACE(`Amount`,',','.'))
WHEN 1 THEN SUM((REPLACE(`Rabatt`,',','.') * REPLACE(`InPrice`,',','.')) * REPLACE(`Amount`,',','.'))
ELSE 0
END

FROM `anmaterial` 
WHERE `Order` = `ordrar`.`order`) AS `MaterialSum` 
FROM `ordrar` 
WHERE `ordertyp` = '3' group by `ordrar`.`order` ORDER BY `ordrar`.`ID` ASC

如果我删除“group by ordrar.order”,我可以让它在大约 1 分钟内运行。

每个表大约有 4000 行。

谁能帮我找出为什么执行这个查询需要这么长时间的问题?

【问题讨论】:

  • 你的表是否被正确索引
  • 你能显示这个查询的解释命令输出吗?
  • 感谢@KarthickKumar 我忘了索引表中的 2 个。这大大减慢了一切。

标签: php mysql sql


【解决方案1】:

我忘记索引表中的 2 个。这大大减慢了一切。

再次感谢 Karthick Kumar!

【讨论】:

    【解决方案2】:

    为什么不使用 LEFT JOIN?我认为这有问题

    SELECT *, 
    (CASE WHEN `Grupp_ID` > 0 THEN `Grupp_Name` ELSE  `Customers`.`Customer` END) AS `Cust` 
    ...
    LEFT JOIN `Customers` ON `Customers`.`ID` = `ordrar`.`CustomerNr`
    ...
    FROM `ordrar` 
    WHERE `ordertyp` = '3' group by `ordrar`.`order` ORDER BY `ordrar`.`ID` ASC
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-13
      • 1970-01-01
      • 2017-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多