好的,正如标题所述,查询在2天前运行良好,然后昨天突然该网站的加载速度非常慢。我将其追溯到几个查询。我可以添加一个似乎有帮助的索引,但是我无法弄清楚这个索引。我尝试在表上进行修复和优化,但无济于事。我不知道发生了什么太大的变化,以至于查询不到一秒钟就变成了20多秒钟。任何帮助将非常感激。

SELECT city
FROM listings LEFT JOIN agencies
ON listings.agencyid_fk = agencies.agencyid
WHERE listingstatus IN (1,3) AND appid_fk = 101 AND active = 1
      AND auction IS NULL AND agencies.multilist = 1
      AND notagency IS NULL
GROUP BY city
ORDER BY city;


我不确定如何导出解释查询结果以使其在此处可读,因此我只将其放在代码段中。单击运行以在html表中查看它。

id select_type table    type   possible_keys          key       key_len ref                       rows  Extra
 1 SIMPLE      listings ref    appid_fk,listingstatus appid_fk        2 const                     21699 Using where; Using temporary; Using filesort
 1 SIMPLE      agencies eq_ref PRIMARY,active         PRIMARY         2 mls2.listings.agencyid_fk     1 Using where


这是桌子...

列表表:

CREATE TABLE mls2.listings (
   listingid INT(11) AUTO_INCREMENT NOT NULL,
   appid_fk SMALLINT(3) NOT NULL DEFAULT '0',
   agencyid_fk SMALLINT(3) NOT NULL DEFAULT '0',
   listingstatus SMALLINT(3),
   city VARCHAR(30) CHARACTER SET latin1 COLLATE latin1_swedish_ci,
   multilist TINYINT(1),
   auction TINYINT(1),
   PRIMARY KEY (listingid)
) ENGINE = myisam ROW_FORMAT = DEFAULT CHARACTER SET latin1;


代理商表:

CREATE TABLE mls2.agenciesx (
   agencyid SMALLINT(6) AUTO_INCREMENT NOT NULL,
   multilist TINYINT(4) DEFAULT '0',
   notagency TINYINT(1),
   active TINYINT(1),
  PRIMARY KEY (agencyid)
) ENGINE = myisam ROW_FORMAT = DEFAULT CHARACTER SET latin1;

最佳答案

采纳以上评论后,请尝试将以下索引添加到表中...

INDEX(city,listingstatus,appid_fk,auction)
INDEX(active,multilist,notagency)


在这两种情况下,索引中各列的排列顺序可能会有所不同,因此请尝试一下,尽管代理商表中的行很少,以至于没有关系。

接下来,摆脱GROUP BY子句,并按如下所示编写查询。

SELECT DISTINCT l.city
           FROM listings l
           JOIN agencies a
             ON a.agencyid = l.agencyid_fk
          WHERE l.listingstatus IN (1,3)
            AND l.appid_fk = 101
            AND a.active = 1
            AND l.auction IS NULL
            AND a.multilist = 1
            AND a.notagency IS NULL
          ORDER
             BY city;


注意:尽管与该特定问题无关,但您最初的问题表明此模式非常需要标准化。

关于mysql - 2天前mysql查询很好,今天 super 慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50038770/

10-11 04:51
查看更多