DBAtlas · データベース運用アトラス

高度なオプション(ヒストグラムなど)で統計を収集

Oracle

EXEC DBMS_STATS.GATHER_TABLE_STATS(
  ownname=>'HR', tabname=>'EMPLOYEE',
  estimate_percent=>DBMS_STATS.AUTO_SAMPLE_SIZE,
  method_opt=>'FOR ALL COLUMNS SIZE AUTO', degree=>4);

method_opt はヒストグラムを、degree は並列度を制御する。統計を固定するには LOCK_TABLE_STATS を使用する。

PostgreSQL

ALTER TABLE customer ALTER COLUMN city SET STATISTICS 500;
ANALYZE customer;

列ごとのサンプリングターゲット。default_statistics_target はグローバルのデフォルトを設定する。

MySQL

ANALYZE TABLE customer UPDATE HISTOGRAM ON city WITH 32 BUCKETS;

MySQL 8.0 のヒストグラムサポート。フィルタに使われるが選択性の低い列に有用。

SQL Server

UPDATE STATISTICS dbo.customer WITH FULLSCAN;
-- Filtered statistics: CREATE STATISTICS ... WHERE ...

FULLSCAN が最も正確。大きなテーブルでは SAMPLE を使用する。自動更新には AUTO_UPDATE_STATISTICS。

MongoDB

// There are no manual statistics; the planner measures at runtime.
db.customer.getPlanCache().clear()

古いプランキャッシュの消去以外に、手動の統計は不要。

Redis

# Not applicable.

統計/オプティマイザはない。

Elasticsearch

# There is no statistics gathering; refresh searchability:
POST <index>/_refresh

クエリ時には field data と doc values が使用される。force merge はセグメントを削減する。

DBAtlas で開く →