web-dev-qa-db-ja.com

時々インデックスを更新し続ける必要はありますか?

この質問は、私が使用するすべてのデータベース製品に共通しています。 SQL Server、MySQL、Oracle、PostgreSQL。

新しいデータベースを作成しましたが、現在、テーブルにはレコードがありません。クエリで頻繁に必要となる、テーブルのそのような列すべてにインデックスを作成しました。テーブルにレコードを追加し続けると、インデックスが物理的(クラスター化)および論理的(非クラスター化)に更新される方法を知りたいですか?インデックスは自動的に更新されますか、それとも時々手動で更新する必要がありますか?

6
RPK

インデックス自体の値は自動的に更新されます。私はSQL Serverについてのみ話すことができますが、特に定期的に更新されるテーブル上にある場合は特に、断片化が発生するため、インデックスの再構築または再編成が必要になることがあります。インデックスの断片化は、sys.dm_db_index_physical_stats DMVを介して監視できます。

http://msdn.Microsoft.com/en-us/library/ms188917.aspx

最良の戦略は通常、特定のレベルの断片化に対するインデックスを探し、この値に基づいて再構築または再編成するスクリプトを使用することです。多くの人がOla Hallengrenのスクリプトを使用しています。

http://ola.hallengren.com/

本番データベースでは、毎晩これと同様のスクリプトを実行して、断片化をチェックします(ただし、これはやり過ぎかもしれません)。

3
georgeb

インデックスは自動的に更新されますwhatはそれらに格納されます(インデックスが付けられた行の列値)。

ただし、一部のDBMSでは、インデックス値のストレージを最適化するために、定期的なメンテナンス(別名「再構築」)が必要です。

Microsoft SQL Serverの古いバージョンでは、効率を維持するために定期的にインデックスを再構築する必要がありました。しかし、それが新しいバージョン(2005,2008)でも当てはまるかどうかはわかりません

Oracleでインデックスを再作成する必要はありません。

PostgreSQLの(自動)バキュームプロセスはスペースの再利用を処理しますが、(まれに)再構築が必要になる場合もあります。

作成したインデックスは、データベースサーバーによって自動的に管理されます。

さて、ログインしてメンテナンスをする必要があるときから

  1. 古いレコードが本当に削除されたことを確認してください
  2. すべての新しいものが本当に正しい場所に追加されていることを確認してください

PostgreSQLでは、ジャンクをクリーンアップするためにインデックスを掃除する必要があることを知っています。

MySQLでは、インデックスが正しくソートされ、サブインデックスが正しいことを確認するために最適化を実行する必要があることを知っています。

2
WojonsTech