いいえ、すべての列にインデックスを付けるわけではありません。 WHERE
に特に関係する列にインデックスを付けます 句、および場合によってはORDER BY
に関与している場合 。
この場合、type
のインデックスが必要になります :
SELECT name FROM users WHERE type='admin'
この場合、active,type
のインデックスが必要になります :
SELECT name FROM users WHERE type='admin' AND active=1
この場合、active,type,name
のインデックスが必要になる場合があります :
SELECT name FROM users WHERE type-='admin' AND active=1 ORDER BY name LIMIT 10
追加するインデックスが多いほど書き込みは遅くなりますが、読み取りは速くなります。これは古典的なトレードオフです。必要なインデックスを注意深く評価し、具体的なメリットがある場合にのみ適用してください。彼らがそこにいるはずだと感じているからといって、彼らを平手打ちするだけではいけません。
1000行未満の非常に小さなテーブルでは、テーブルスキャンにそれほど時間がかからないため、インデックスはそれほど役に立ちません。些細なことではありませんが、絶対に必要です。
パフォーマンスの問題が発生している場合は、インデックスの不足ではなく、スキーマが最大の障害であることをお勧めします。