いくつかのテーブルがあり、複合インデックスが役立つかどうか疑問に思っています。私は使用してMySQL 5+いますが、これはどのデータベースにも当てはまると思います(または当てはまりませんか?)。
とにかく、次の表を言ってください:
username active
-----------------------------------
Moe.Howard 1
Larry.Fine 0
Shemp.Howard 1
だから私は通常次のように選択します:
select * from users where username = 'shemp.howard' and active = 1;
はactive=1、多くのテーブルで使用されています。通常、私のインデックスはusername列にありますが、アクティブフラグも(同じインデックスに)追加することを考えています。
私の論理は、クエリエンジンがインデックスをスキャンしているとき、次のようなインデックスに対してスキャンすることです:
moe.howard,1
shemp.howard,1
larry.fine,0
非アクティブなユーザーにヒットする前に見つけShempます (Larry)。
さて、私たちのactive列は通常TINYINTSとUnsignedです。しかし、インデックスが逆になっているのではないかと心配しています!
larry.fine,0
moe.howard,1
shemp.howard,1
これをどのように処理し、インデックスが正しいことを確認するにはどうすればよいですか? アクティブな列をユーザー名と同じインデックスに追加すべきではありませんか? または、アクティブ用に別のインデックスを作成して降順にする必要がありますか?
ありがとう。