저는 쿼리 최적화를 연구 중이며 각 종류의 최적화가 쿼리에 얼마나 도움이되는지 알고 싶습니다. 지난 번에 나는 answer을 가졌지 만, 실험에서 링크의 모든 최적화가 O (n^1.8) 시간 공약을 사용하지 않도록 설정하면 모두 O (n^0.5)가 가능합니다. 그다지 큰 차이는 없지만, 그것들을 모두 비활성화 시키면, 여전히 다른 최적화가 있습니까? 매번 한 번만 주요 최적화를 실제로 수행 할 수 있습니까?PostgreSQL의 모든 최적화를 비활성화하는 방법
답변
수 없습니다.
PostgreSQL의 쿼리 플래너에는 "최적화 해제"플래그가 없습니다.
추가하는 것은 흥미롭지 만 회귀 테스트를 훨씬 더 복잡하게 만들고 매우 제한된 유틸리티로 만들 것입니다.
원하는대로하려면 각 테스트에 대해 PostgreSQL을 쿼리 플래너 코드를 수정하고 다시 컴파일하고 다시 설치하려고합니다. 또는 사용자 정의 GUC (시스템 변수, 예 : enable_seqscan
)를 추가하여 특정 최적화를 설정하거나 해제 할 수 있도록 해킹하십시오.
나는 그러한 패치가 PostgreSQL에 받아 들여지지 않을까 의심 스럽지만, 폐기 용으로 사용하는 것이 가치가 있습니다.
유일한 문제는 PostgreSQL이 "최적화"와 "쿼리를 실행하기 위해 수행하는 작업"을 강력히 구분하지 않는다는 것입니다. 때로는 플래너 코드 의 일부가 및 일 경우 올바르게 작동하려면 특정 최적화가 적용된이 필요합니다.
고마워, 내가 최적화 프로그램의 소스 코드를 수정해야 할 것 같아요. 그러나 그것은 다소 복잡해 보인다. postgresql optimizer의 세부 아키텍처에 대해 일부 문서 나 책을 제안 해 주시겠습니까? 나는 하나를 찾지 못했습니다 ... – user3419945
postgresql 사이트의 개발자 섹션과 개발자 postgresql wiki 항목을보십시오. 거기에 몇 가지 리소스가 있습니다. Pg 문서에는 내부 정보도 있습니다. 가장 좋은 리소스는 소스 코드의 자체 주석입니다. 예, 복잡합니다. –
- 1. LLVM에서 최적화를 비활성화하는 방법
- 2. postgresql "캐시"최적화를 비활성화하는 방법은 무엇입니까?
- 3. 모든 버튼을 비활성화하는 방법
- 4. PostgreSQL의 : 모든 테이블
- 5. Fabric.js의 모든 객체를 비활성화하는 방법
- 6. Visual Studio 2010에서 반환 값 최적화를 비활성화하는 방법은 무엇입니까?
- 7. 특정 코드 행에 대해 컴파일러 최적화를 비활성화하는 방법이 있습니까?
- 8. sun jvm을 사용하여 인라인 최적화를 비활성화하는 방법은 무엇입니까?
- 9. 2.2 이전 Android에서 레이아웃 최적화를 비활성화하는 방법은 무엇입니까?
- 10. Visual C++ 2010에서 링커 최적화를 비활성화하는 방법은 무엇입니까?
- 11. PostgreSQL의 모든 테이블의 모든 레코드에서 모든 빈 문자열을 NULL로 설정하십시오.
- 12. MPRemoteCommandCenter에서 모든 MPRemoteCommand 개체를 비활성화하는 방법
- 13. 모바일 사이트에서 모든 미디어 쿼리를 비활성화하는 방법
- 14. 모든 테스트에서 after_validation 메소드를 비활성화하는 방법
- 15. div의 하위 요소에있는 모든 onClick을 비활성화하는 방법
- 16. Java, Android의 모든 버튼을 비활성화하는 방법
- 17. 특정 요소 그룹의 모든 스타일을 비활성화하는 방법
- 18. 모든 테 더링 데이터에서 인터넷을 비활성화하는 방법
- 19. 태블릿 장치에있는 모든 물리적 단추를 비활성화하는 방법
- 20. AppCode에서 컴파일러 최적화를 끄는 방법
- 21. 다른 모든 UIView를 표시하고 아래의 모든 항목을 비활성화하는 적절한 방법
- 22. 동일한 값을 가진 모든 메뉴에서 모든 옵션을 비활성화하는 방법 jQuery
- 23. - PostgreSQL의
- 24. PostgreSQL의 :
- 25. PostgreSQL의
- 26. 모든 배경 내용을 비활성화하는 개념
- 27. bash 스크립트를 사용하여 postgresql의 모든 테이블을 삭제하십시오.
- 28. PostgreSQL의 열에있는 기존의 모든 값 집합을 가져옵니다.
- 29. PostgreSQL의 : 모든 관련 기록 정합 조건
- 30. 검색 최적화를 위해 문자열을 저장하는 방법
질문에 함축적으로 말하면 모든 쿼리를 실행하는 데 "기본"방법이 있다는 개념이며, 무언가를하지 않으면 기본 방법으로 돌아갈 수 있습니다. 나는 그것이 플래너가 작동하는 방식이라고 생각하지 않습니다. 또한, n^0.5와 n^1.8 사이의 차이는 엄청날 수 있습니다. – jjanes