2017-04-24 39 views
0

我有這個查詢,這幫助我從PHP疼痛保存,但如果結果增加,現在我看到,同樣的查詢停止我的應用程序。哪個更差MYSQL查詢需要在服務器上太長,但在本地主機上,但它工作正常

SELECT *, 
     (SELECT COUNT(*) 
      FROM table1 
       INNER JOIN table2 ON table1.somecolumn = table2.somecolumn 
     WHERE  ( table1.statuscolumn = 'status1' 
        OR table1.statuscolumn = 'status2') 
       AND table2.othercolumn2 = 'somevalue' 
       AND table1.othercolumn 
       AND table1.othercolumn LIKE 
         CONCAT('%', table3.othercolumn3, '%')) 
      AS utilization 
    FROM table3, table1 
WHERE  table3.othercolumn2 = 'somevalue' 
     AND ( table1.statuscolumn = 'status1' 
      OR table1.statuscolumn = 'status2') 
     AND table3.othercolumn4 = 'on' 
GROUP BY table3.othercolumn3 

如何在較短的執行時間內達到相同的結果。謝謝。

+0

你已經索引設置? –

+0

根本沒有索引。一些像othercolumn2這樣的列是索引,但不適用於此查詢的任何表。 ( –

+0

)你在表之間沒有連接條件,這通常是查詢中主要問題的標誌 –

回答

0

雖然很難給出一個確切的答案,而無需一個良好的質量問題,我想給它一個嘗試:

ALTER TABLE table1 
    ADD INDEX (somecolumn); 

ALTER TABLE table2 
    ADD INDEX (somecolumn); 

ALTER TABLE table1 
    ADD INDEX (statuscolumn); 

ALTER TABLE table2 
    ADD INDEX (othercolumn2); 

ALTER TABLE table3 
    ADD INDEX (othercolumn2); 

ALTER TABLE table3 
    ADD INDEX (othercolumn4); 
+0

這將改變我坦白說我沒有被授權的表格。不知何故,而不是使用內部的子查詢,我提取結果並運行其他每列的子查詢。哪種方法執行時間較短,現在應用程序根本就沒有停止。感謝您的支持! –

+0

因此......如果您無權修改表格,您希望如何優化查詢?老兄,你在浪費我們的時間 – bc004346

相關問題