2017-08-07 160 views
0

此處爲第一個計時器。我有一個MySQL查詢,只要它是兩個表,它在6秒內運行。長時間運行mySQL查詢

sitedata is 4000 records, 10 fields. 
clientdata is 2000 records, 8 fields. 

下面的查詢在6秒內運行通過添加第三個表,我得到400秒。

該表是可整合的,400個記錄,12個字段。

任何建議,將不勝感激。

SELECT sitedata.geozone AS geo, sitedata.week AS schweek, sitedata.PMcycle AS cycle, 
     sitedata.sitenotes1 AS sitenotes1, sitedata.sitenotes2 AS sitenotes2, sitedata.sitezip AS sitezip, 
     sitedata.sitecity AS sitecity, sitedata.sitestate AS sitestate, 
     sitedata.siteaddress AS siteaddress, sitedata.clientsite1 AS ClientSite, 
     clientdata.prefix AS prefix, 
     consolidatortable.calldate AS indate, consolidatortable.duedate AS promisedate, 
     consolidatortable.nte AS callnte, 
     consolidatortable.description AS calldescription, 
     consolidatortable.tracking AS POnumber 
FROM ((sitedata INNER JOIN 
     clientdata 
     ON sitedata.clientname = clientdata.clientname COLLATE utf8_unicode_ci 
    ) INNER JOIN 
     consolidatortable 
     ON sitedata.portalname1 = consolidatortable.site COLLATE utf8_unicode_ci); 
+0

嘗試OPTIMIZE TABLE表名https://dev.mysql.com/doc/refman/5.7/en/optimize-table.html – Developer

回答

0

首先,學會更簡單地編寫查詢:

SELECT sd.geozone AS geo, sd.week AS schweek, sd.PMcycle AS cycle, 
     sd.sitenotes1 AS sitenotes1, sd.sitenotes2 AS sitenotes2, sd.sitezip AS sitezip, 
     sd.sitecity AS sitecity, sd.sitestate AS sitestate, 
     sd.siteaddress AS siteaddress, sd.clientsite1 AS ClientSite, 
     cd.prefix AS prefix, 
     ct.calldate AS indate, ct.duedate AS promisedate, 
     ct.nte AS callnte, 
     ct.description AS calldescription, 
     ct.tracking AS POnumber 
FROM sitedata sd INNER JOIN 
    clientdata cd 
    ON sd.clientname = cd.clientname COLLATE utf8_unicode_ci INNER JOIN 
    consolidatortable ct 
    ON sd.portalname1 = ct.site COLLATE utf8_unicode_ci; 

FROM條款表明,你應該有clientdata(clientname)consolidatortable(site)指標。

但是,COLLATE可能會排除使用任何索引。這可能是您的性能問題的根本原因。我建議你修復這些表,以便它們都使用相同的排序規則。然後從查詢中刪除COLLATE