データベースのインデックス - テーブルのサイズは重要ですか?
-
25-09-2019 - |
質問
私が言いたいのは:列が 20 個あるテーブルは、列が 4 つだけあるテーブルよりも、特定のフィールド (検索クエリで使用されるフィールド) にインデックスを付けることでメリットが大きくなりますか?
また:あまり検索しないが、将来的には検索する可能性があるフィールドにインデックスを追加すると、どのような害がありますか?インデックスを追加するとマイナスになることはありますか?それはディスク上で占有するサイズだけでしょうか、それとも不必要なインデックスを追加することで動作が遅くなる可能性がありますか?
コメントから抜粋
私は Postgres (最新バージョン) を使用しており、LIKE タイプのクエリなどを多数実行するテーブルが 1 つありますが、クライアントが CRUD にアクセスできるため、値は間違いなく頻繁に変更されます。インデックスのアイデアを理解する必要がありますか?ただの頭痛なのでしょうか?
解決
は20列を持つテーブルがちょうど4列を持つテーブルよりも(検索っぽいクエリで使われています1)特定のフィールドをインデックスからより多くの利益を得ていますか?
いいえ、テーブル内の列の数は指数を有するから利点には関係ありません。
は、インデックスは、指定された列(複数可)の値にのみです。それはあなたのクエリが表示されますどのくらいの利益に影響される値の頻度です。それは値が1または他の値になります50/50のチャンスですのでたとえば、ブール値を含む列は、索引作成のためのお粗末な選択です。すべての行を超える50/50スプリットでは、インデックスが特定の行の検索を絞り込むません。
私は後で将来に多くを検索するかもしれませんが、していないことをフィールドにインデックスを追加することに害は何ですか?
は、使用することができる場合にインデックスのみデータ検索を高速化するが、それらは負にINSERT / UPDATE / DELETEステートメントの速度に影響を与えます。インデックスはまた、その価値を維持するためにメンテナンスが必要。
他のヒント
LIKE クエリを実行している場合、インデックスはいずれにせよあまり役に立たないことがわかるかもしれません。インデックスを使用するとこのクエリが改善される可能性がありますが...
select * from t23
where whatever like 'SOMETHING%'
/
...インデックスがこれらのクエリのいずれにも役立つとは考えられません...
select * from t23
where whatever like '%SOMETHING%'
/
select * from t23
where whatever like '%SOMETHING'
/
フリー テキスト フィールドがあり、ユーザーがあいまい一致を必要とする場合は、Postgres のフルテキスト機能を検討する必要があります。これには、LIKE ではなく MATCH 演算子が使用され、特別なインデックス タイプが必要になります。 もっと詳しく調べてください。
フルテキスト インデックスは通常のインデックスよりも複雑であるという注意点があります。 関連する設計上の決定は単純ではありません. 。また、実装によっては必要なものもあります。 追加のメンテナンス活動.