テーブルには2つのインデックス付きフィールドがあります-type
とuserid
(複合ではなく個々のインデックス)。
type
sフィールドの値は非常に制限されているため(0または1のみ)、テーブルレコードの50%が同じtype
を持っています。一方、userid
値ははるかに大きなセットから取得されるため、同じuserid
を持つレコードの量は少なくなります。
これらのクエリはいずれも他のクエリよりも高速に実行されますか?
select * from table where type=1 and userid=5
select * from table where userid=5 and type=1
また、両方のフィールドにインデックスが付けられていない場合、動作が変わりますか?
ほとんどのクエリオプティマイザーは、条件がヒントとして表示される順序を使用します。他のすべてが等しい場合、それらはその順序に従います。
ただし、多くのものがそれをオーバーライドできます。
varchar(max)
vs int
)そのため(そして、これはすべてのSQL最適化の質問に当てはまります)パフォーマンスの問題を観察しない限り、(想像される)パフォーマンスではなく、明快さのために最適化することをお勧めします。
あなたの小さな例ではないはずです。クエリオプティマイザーは正しいことを行う必要があります。クエリの前にexplain
を追加することで、確認できます。 MySQLは、物事をどのように結合しているか、および結合を行うために検索する必要がある行数を教えてくれます。例えば:
explain select * from table where type=1 and userid=5
インデックスが作成されていない場合、おそらく動作が変更されます。