2014-01-09 4 views

답변

2

ANALYZEEXPLAIN ANALYZE을 혼동하고 있다고 생각합니다. 다른 것들이 있습니다.

변경 사항을 적용하지 않고 쿼리 비용과 타이밍을 원할 경우 유일한 실제 옵션은 EXPLAIN ANALYZE, ROLLBACK에서 쿼리를 실행하는 것입니다.

이 여전히 의미하는 쿼리를 실행한다 :

  • CPU 시간과
  • 잠금 여전히
  • 새로운 행이 실제로 테이블에 기록됩니다 기간 동안 촬영 및 개최 소비되는 I/O 및 인덱스가 있지만 표시되지 않습니다. 그들은 VACUUM에서 정리됩니다.
+0

안녕하세요, 귀하의 회신에 감사드립니다. 글쎄, 아마도 내 진술은 약간 불분명하다. 나는 테이블의 통계를 수동으로 지정하는 방법을 찾고 싶다. 테이블 A에는 증서에 데이터가 없다고하지만, PostgreSQL이 거기에 있다고 생각하게 만들고 싶다. 그 테이블에 1000 행이 있으므로 모의 통계를 사용하여 쿼리를 평가할 수 있습니다. – yingzhox

+0

@ user1780833 예, 매우 불분명합니다! 이 시점에서 매우 중요한 세부 사항 및 기타 관련 상황을 포함하는 새로운 게시를 고려하십시오. –

1

삽입 된 데이터가없는 경우에도 쿼리를 이미 설명 할 수 있으므로 실행 계획을 느끼는 데 도움이됩니다.

실제 데이터와 같은 것이 없습니다. 해결 방법으로 트랜잭션을 시작하고 일부 데이터를 INSERT하고 EXPLAIN으로 쿼리를 분석 한 다음 거래를 ROLLBACK 처리 할 수 ​​있습니다.

예 :

mydatabase=# BEGIN; 
BEGIN 
mydatabase=# INSERT INTO auth_message (user_id, message) VALUES (1, 'foobar'); 
INSERT 0 1 
mydatabase=# EXPLAIN ANALYSE SELECT count(*) FROM auth_message; 
                QUERY PLAN             
---------------------------------------------------------------------------------------------------------------- 
Aggregate (cost=24.50..24.51 rows=1 width=0) (actual time=0.011..0.011 rows=1 loops=1) 
    -> Seq Scan on auth_message (cost=0.00..21.60 rows=1160 width=0) (actual time=0.007..0.008 rows=1 loops=1) 
Total runtime: 0.042 ms 
(3 lignes) 

mydatabase=# ROLLBACK; 
ROLLBACK 
mydatabase=# EXPLAIN ANALYSE SELECT count(*) FROM auth_message; 
                QUERY PLAN             
---------------------------------------------------------------------------------------------------------------- 
Aggregate (cost=24.50..24.51 rows=1 width=0) (actual time=0.011..0.011 rows=1 loops=1) 
    -> Seq Scan on auth_message (cost=0.00..21.60 rows=1160 width=0) (actual time=0.009..0.009 rows=0 loops=1) 
Total runtime: 0.043 ms 
(3 lignes) 

1 회가되었다고 표시를 분석 EXPLAIN 일부 "임시"데이터 (행 = 1)

이 엄격히 "거짓"아니지만 적어도 PostgreSQL을 계획 실행 (및 할 수있는 다양한 최적화), IMHO, 데이터가없는 것보다 가장 좋습니다 (면책 조항 : 순전히 직관적 인)

+0

아 ... 그리고 ROLLBACK 이후에 VACUUM ANALYZE your_table을 추가하면 실행 계획에 사용되는 통계에서 잠재적 수정 사항을 정리하는 데 도움이 될 수 있습니다. 그러나 PostgreSQL 전문가가 아니기 때문에 롤백 된 트랜잭션도 테이블 통계를 롤백하는지 확신 할 수 없습니다 . –

관련 문제