2016-10-01 98 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,以便我们知道涉及的数据类型,索引和引擎。