2016-08-08 5 views
-1
SELECT * FROM inv, clients 
WHERE inv.client_id = clients.ID 
AND  (inv.type = "STA" 
OR  inv.type = "FIN") 

ORmySQL innoDBでは、どのクエリがより高速で冗長性が低いのですか?

SELECT * FROM invoice, clients 
WHERE inv.client_id = clients.ID 
AND MATCH (inv.type) AGAINST ("STA FIN") 

私はこれらの2つの質問です知っているが、おそらく彼らは一緒に

+0

なぜこの質問を下取りしますか?警察を演じるよりも質問に答えるほうが理にかなっていませんか? – Ben

答えて

0

短い答え行く:使用inv.type IN ("STA", "FIN")INDEX(client_id, type)を。

長い答え:あなたはtypeFULLTEXTインデックスを持っていない限り

MATCH...AGAINSTがひどく遅いです。しかし、これはFULLTEXTの悪用なので、私はそれをお勧めしません。

AND (inv.type = "STA" OR inv.type = "FIN")は自動的にAND inv.type IN ("STA", "FIN")になりますが、これはかなり高速です。 INDEX(type)がある場合は、そのインデックスを使用する可能性があり、非常に高速です。これの有用性はカーディナリティに依存します。「型」は非常に小さな値を持つ列のように聞こえるため、インデックスが役に立たない可能性があります。

もう一つの問題:JOIN...ONを使用し、時代遅れの "commajoin" を使用しないでください。

SELECT * 
    FROM invoice 
    JOIN clients ON inv.client_id = clients.ID -- How the tables relate 
    WHERE inv.type IN ("STA", "FIN") -- filtering 

あなたは '複合' インデックスがONの両方の世話をすることを利用し

inv: INDEX(client_id, type) 

を有するべきであり、上記の "低基数"の問題を避けながら、どこでも。

+0

タイプは実際には4つの異なる用語を持ち、それぞれが3つの文字です。さて、FULLTEXTの検索は役に立たない。私はこれを続けます、ありがとう – Ben

関連する問題