MariaDB没有优化查询

时间:2016-03-22 09:48:46

标签: performance join mariadb

这里有第一个问题,所以要好看: - )

我曾经在我的所有服务器上使用MySQL,因为Cent OS 7现在配备了MariaDB instea,我试了一下。一切似乎都很好,除了一个查询,MySQL以毫秒为单位执行而MariaDB需要几秒钟:(

SELECT * FROM (
    SELECT id, date_start FROM matches
    WHERE matches.type =5409
    AND matches.status =10
    AND matches.date_start >=  '2016-02-01'
    AND matches.date_start <=  '2016-02-08'
) AS tmp
INNER JOIN seat ON tmp.id = seat.match_id

桌席拥有540万个参赛作品,比赛中有三分之一。每场比赛都有3个席位。

现在,MySQL首先巧妙地派生出tmp表,然后加入仅在给定时间范围内找到的112个匹配项:

id select_type  table      type possible_keys key      len  ref    rows     Extra
1  PRIMARY      <derived2> ALL   NULL         NULL     NULL NULL   112  
1  PRIMARY      seat       ref  match_id      match_id 8    tmp.id 3    
2  DERIVED      matches    ALL  NULL          NULL     NULL NULL   1919638  Using where

另一方面,MariaDB首先在整个匹配表上执行JOIN。 500万条目并不那么聪明:

id select_type  table   type   possible_keys key     len  ref           rows    Extra
1  SIMPLE       seat    ALL    match_id      NULL    NULL NULL          5462345 
1  SIMPLE       matches eq_ref PRIMARY       PRIMARY 8    seat.match_id 1       Using where

match_id是座位表中的一个键。

我尝试了不同的方法,没有任何效果。我还不想放弃MariaDB,因为我读过它并且还注意到自己在其他查询上有点快。但这实际上是一个显示阻止......

所以任何帮助都会非常感激!

1 个答案:

答案 0 :(得分:0)

matches

INDEX(type, status, date_start)

将加速MySQL和MariaDB。 (typestatus可以互换,但date_start需要排在第三位。)

产生差异的原因是MySQL在某些优化方面领先于MariaDB,而且你遇到了这样的优势。