2015-10-08 31 views
-6

。我有一個SQL問題需要大約2分鐘才能完成。 的SQL問題是這樣的:SQL需要2分鐘正如標題所說進行查詢

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 

,如果我「通過ordrarorder組」刪除我能得到它在約1分鐘運行。

每個表都有約4000行。

有人可以幫助我發現問題,爲什麼需要很長時間來執行此查詢?

+1

您的表格是否已正確編制索引 –

+1

您可以顯示此查詢的解釋命令輸出嗎? –

+0

謝謝@KarthickKumar我忘記索引2表。大大減緩了一切。 –

回答

0

爲什麼你不使用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 
0

我忘了索引2的表。大大減緩了一切。

再次感謝Karthick Kumar!