优化选择mysql

时间:2016-10-01 10:04:45

标签: mysql select optimization

可以帮我优化这个查询吗? 感谢您的支持

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 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

这个指数很可能有助于提高速度:

INDEX(Attiva, Position, Data, Ora)

完全按照这个顺序。

除了验证行存在之外,查询似乎没有使用cs_regioni;如果可能,删除对该表的引用。

Index Cookbook

如果您需要进一步讨论,请提供SHOW CREATE TABLE,以便我们了解所涉及的数据类型,索引和引擎。