2016-10-01 100 views
0

可以幫我優化這個查詢嗎? 感謝您的支持優化select mysql

SELECT cs_annunci.ID, cs_utenti.ID, cs_annunci.Data, cs_annunci.Tipologia, 
     cs_annunci.Foto1, cs_annunci.Titolo, cs_annunci.IDRazza, 
     cs_annunci.Cucciolo, cs_utenti.Attivita, cs_annunci.IDRubrica, 
     cs_annunci.IDSottorubrica, cs_annunci.Position, cs_annunci.Ora, 
     cs_annunci.Prezzo, cs_annunci.Pedigree, cs_annunci.IDProvincia 
    FROM cs_annunci, cs_utenti, cs_regioni 
    WHERE cs_annunci.IDUtente = cs_utenti.ID 
     AND cs_annunci.IDRegione = cs_regioni.ID 
     AND cs_utenti.Sospeso = '0' 
     AND cs_annunci.Attiva = '1' 
     AND cs_utenti.Cancellato = '0' 
    ORDER BY cs_annunci.Position DESC, cs_annunci.Data DESC, 
     cs_annunci.Ora DESC 
    LIMIT 0, 20 

EXPLAIN (.png)

+2

請爲所有相關表格提供CREATE TABLE語句。 – Strawberry

回答

1

順便說一句,我覺得這更容易閱讀...

SELECT a.ID 
     , u.ID 
     , a.Data 
     , a.Tipologia 
     , a.Foto1 
     , a.Titolo 
     , a.IDRazza 
     , a.Cucciolo 
     , u.Attivita 
     , a.IDRubrica 
     , a.IDSottorubrica 
     , a.Position 
     , a.Ora 
     , a.Prezzo 
     , a.Pedigree 
     , a.IDProvincia 
    FROM cs_annunci a 
    JOIN cs_utenti u 
    ON u.ID = a.IDUtente 
    JOIN cs_regioni r 
    ON r.ID = a.IDRegione 
    WHERE u.Sospeso = 0 
    AND a.Attiva = 1 
    AND u.Cancellato = 0 
    ORDER 
    BY a.Position DESC 
     , a.Data DESC 
     , a.Ora DESC 
    LIMIT 0, 20 
+0

良好 - 提倡簡短別名和'JOIN ... ON'。 –

0

該指數很可能與速度幫助:

INDEX(Attiva, Position, Data, Ora) 

正是這樣的順序。

查詢似乎沒有使用cs_regioni,除了驗證行是否存在;如果可能,刪除對該表的引用。

Index Cookbook

如果您需要進一步討論,請提供SHOW CREATE TABLE,以便我們知道涉及的數據類型,索引和引擎。