データベースにほぼ一意のフィールドがあります。値は 98% の確率で一意ですが、いくつかの重複がある可能性があります。このフィールドで多くの検索を行うことはありません。月に2回言う。現在、テーブルには約 5000 件のレコードがあり、1 か月あたり約 150 件増加します。
このフィールドにはインデックスが必要ですか?
私はMySQLを使用しています。
データベースにほぼ一意のフィールドがあります。値は 98% の確率で一意ですが、いくつかの重複がある可能性があります。このフィールドで多くの検索を行うことはありません。月に2回言う。現在、テーブルには約 5000 件のレコードがあり、1 か月あたり約 150 件増加します。
このフィールドにはインデックスが必要ですか?
私はMySQLを使用しています。
「ほぼユニーク」というのはおそらくニシンだと思います。データは一意であるか、そうでないかのいずれかですが、パフォーマンス上の理由からインデックスを作成するかどうかは決定されません。
5000 件のレコードは実際にはそれほど多くありません。インデックスがあるかどうかに関係なく、検索は高速です。その挿入率では、10000 レコードに到達するのに 3 年かかりますが、これもまだ多くはありません。
個人的にはインデックスを追加することは気にしませんが、追加しても問題ありません。
インデックスの追加を決定する際に考慮しなければならないことは、挿入速度と選択速度のトレードオフです。
インデックスがない場合、select
そのフィールドで a を実行すると、MySQL はすべての行を調べてすべてのフィールドを読み取る必要があります。インデックスを追加すると、これを防ぐことができます。
インデックスの欠点は、データが挿入されるたびに、DB がデータの追加に加えてインデックスを更新する必要があることです。通常、これは小さなオーバーヘッドですが、インデックスが大量にあり、多くの書き込みを行っている場合は、実際に気付くでしょう。
データベースにこれだけの行を取得するまでに、とにかくインデックスが必要になります。そうしないと、選択に丸一日かかりますが、フィールドにインデックスを追加しないように注意する必要があります。必要な場合に備えて」
それほど多くのレコードではありません。そのテーブルにインデックスを作成する必要はありません。フィールドの相対的な一意性は関係ありません。何年も前のコモディティ ハードウェアでさえ、そのテーブルに対するクエリには数分の 1 秒かかると思います。
一般的な経験則を使用できます。問題が発生したときに最適化します。インデックスが必要であることに気付くまでは、インデックスを使用しないでください。
それは本当に判断の呼びかけです。このような小さなテーブルを使用すると、インデックスがなくても適度にすばやく検索できるため、インデックスがなくても問題を解決できます。
一方、実際には必要のないインデックスを作成するコストはかなり低いので、それを行わないことで自分自身をあまり節約することはできません。
また、インデックスを作成した場合、突然1000の新しいレコード/週を取得し始めた場合、将来の補償が受けられます。おそらくあなたは状況について十分に知っているので、それは決して起こらないと確信していますが、要件には、あなたが最も期待しないときに変更する方法があります。
編集:要件を変更する場合、考慮すべきことは次のとおりです。DBが大きくなり、後でインデックスが必要であることがわかった場合は、インデックスを作成して実行できますか?または、新しいインデックスを利用するために多くのコードを変更する必要がありますか?
いいえ。レコードは多くなく、頻繁にクエリされることはありません。インデックスを作成する必要はありません。
おっしゃる通り、インデックスは必要ないようですね。経験則では、検索を高速化するために SELECTS で多く使用されているインデックス フィールドが、INSERTS と UPDATES の速度を低下させます (可能性があります)。
あなたのような小さなレコードセットでは、どちらの方法でも実際の世界でヒットすることはほとんどないと思います.
月に 2 回しか検索を行わず、行数が少ない場合は、インデックスを作成しないでください。それはほとんど役に立たない。
場合によります。他の人が回答したように、テーブルの更新速度と選択速度の間にはトレードオフがあります。テーブルの更新には、テーブルに対する挿入、更新、および削除が含まれます。
あなたが対処しなかった1つの質問。テーブルには主キーと対応するインデックスがありますか? インデックスのないテーブルは、通常、少なくとも 1 つのインデックスを持つことでメリットがあります。そのインデックスを取得する最も一般的な方法は、主キーを宣言し、DBMS に依存してそれに応じてインデックスを生成することです。
テーブルに主キーの候補がない場合は、通常、テーブルの設計に重大な欠陥があることを示しています。それは別の問題であり、個別の議論が必要です。