2016-03-22 11 views
0

最初の質問を最適化し、とても素敵:-)MariaDBは今までここにクエリ

ことが、私は私のすべてのサーバーにMySQLを使用するために使用されるとセント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全体に最初の結合は、テーブルと一致しません。5百万のエントリのためにそれほどスマートではない:

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をあきらめたくありません。しかし、これは実際にショーストッパーです...

どんな助けでも大歓迎です! matchesについては

答えて

0

INDEX(type, status, date_start) 

は、MySQLとMariaDBの両方をスピードアップします。 (typestatusが入れ替わったが、第三するdate_start必要がすることができます。)

違いの理由は、MySQLは、特定の最適化に先駆けMariaDBのであるということです、そしてあなたは、このようなものを打ちます。

関連する問題