고급 옵션으로 통계 수집(히스토그램 등)
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()오래된 plan cache를 지우는 것 외에는 수동 통계가 필요 없다.
Redis
# Not applicable.통계/옵티마이저가 없다.
Elasticsearch
# There is no statistics gathering; refresh searchability:
POST <index>/_refresh쿼리 시점에 field data와 doc values를 사용한다. force merge는 세그먼트 수를 줄인다.