短い答え行く:使用inv.type IN ("STA", "FIN")
とINDEX(client_id, type)
を。
長い答え:あなたはtype
にFULLTEXT
インデックスを持っていない限り
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)
を有するべきであり、上記の "低基数"の問題を避けながら、どこでも。
なぜこの質問を下取りしますか?警察を演じるよりも質問に答えるほうが理にかなっていませんか? – Ben