質問

データベースには、ほぼ一意のフィールドがあります。98%の場合、値は一意になりますが、いくつかの重複がある場合があります。このフィールドではあまり検索しません。月に2回言う。現在、テーブルには〜5000件のレコードがあり、1か月あたり約150件増えます。

このフィールドにはインデックスが必要ですか?

MySQLを使用しています。

役に立ちましたか?

解決

「ほぼユニーク」はおそらくニシンです。データは一意であるかそうではありませんが、パフォーマンス上の理由でインデックスを作成するかどうかは決まりません。

回答:

5000レコードは実際にはあまり多くありません。インデックスがあるかどうかに関係なく、検索は依然として高速です。その挿入率では、10000件のレコードを取得するのに3年かかりますが、これもまだ多くありません。
私は個人的にはインデックスを追加することを気にしませんが、あなたがしたかどうかは関係ありません。

説明:

インデックスの追加を決定する際に考慮しなければならないのは、挿入速度と選択速度のトレードオフです。

インデックスなしで、そのフィールドで select を実行すると、MySQLはすべての単一行を調べてすべての単一フィールドを読み取る必要があります。インデックスを追加すると、これを防ぐことができます。

インデックスの欠点は、データが挿入されるたびに、データの追加に加えてDBがインデックスを更新する必要があることです。通常、これは小さなオーバーヘッドですが、インデックスの負荷があり、多くの書き込みを行っている場合は、実際に気づくでしょう。

データベースでこれだけの行を取得するまでには、選択に1日かかるため、とにかくインデックスが必要になりますが、インデックスを追加しないように注意する必要がありますフィールド"万が一の場合に備えて"

他のヒント

これは、それほど多くのレコードではありません。そのテーブルにインデックスを作成する必要はありません。フィールドの相対的な一意性は無関係です-古くからある市販のハードウェアであっても、そのテーブルに対するクエリには数秒かかると思われます。

一般的な経験則を使用できます:問題になったときに最適化します。必要なことに気付くまでインデックスを使用しないでください。

あなたの言うことから、それはインデックスが必要であるようには聞こえません。経験則は、検索を高速化するためにSELECTSで多く使用されているインデックスフィールドです。これにより、INSERTSとUPDATESが遅くなります(できます)。

あなたと同じくらい小さなレコードセットでは、現実世界の多くがどちらの方法でもヒットすることはないと思います。

月に2回だけ検索を行い、その数行だけを検索する場合は、インデックスを作成しないでください。そのほとんどすべてが役に立たない。

いいえ。多くのレコードはなく、頻繁にクエリされることはありません。インデックスを作成する必要はありません。

これは本当に判断の呼び出しです。このような小さなテーブルを使用すると、インデックスがなくても合理的にすばやく検索できるため、インデックスがなくても取得できます。

一方、本当に必要のないインデックスを作成するコストは非常に低いため、実行しないことで多くを節約することはできません。

また、インデックスを作成した場合、突然1000件の新しいレコード/週の取得が開始されれば、将来のためにカバーされます。状況については十分に知っている可能性がありますが、それは決して起こらないと断言できますが、要件には、少なくとも予想していないときに変更する方法があります。

編集:要件の変更に関しては、考慮すべきことは次のとおりです。DBが成長し、後でインデックスが必要であることがわかった場合、インデックスを作成して完了できますか?または、新しいインデックスを使用するために多くのコードを変更する必要がありますか?

状況によります。他の人が答えたように、テーブルの更新速度と選択速度の間にはトレードオフがあります。テーブルの更新には、テーブルの挿入、更新、削除が含まれます。

対処しなかった質問が1つあります。テーブルには主キーと対応するインデックスがありますか?通常、インデックスのないテーブルは、少なくとも1つのインデックスを持つフォームに役立ちます。そのインデックスを取得する最も一般的な方法は、主キーを宣言し、それに応じてDBMSに依存してインデックスを生成することです。

テーブルに主キーの候補がない場合、通常はテーブル設計に重大な欠陥があることを示しています。これは別の問題であり、議論が必要です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top