【问题标题】:Optimize select mysql优化选择mysql
【发布时间】:2017-02-03 17:43:31
【问题描述】:

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

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)

【问题讨论】:

  • 请为所有相关表提供 CREATE TABLE 语句。

标签: mysql select optimization


【解决方案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

【讨论】:

  • 好——提倡短别名和JOIN...ON
【解决方案2】:

这个索引可能有助于提高速度:

INDEX(Attiva, Position, Data, Ora)

完全按照这个顺序。

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

Index Cookbook.

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-10
    • 2019-04-22
    • 2016-06-14
    • 2017-11-18
    • 1970-01-01
    相关资源
    最近更新 更多