복붙노트

[SQL] 어떻게 쿼리의이 계획을 설명 해석합니까?

SQL

어떻게 쿼리의이 계획을 설명 해석합니까?

SQL 문이 실행되는 방법을 이해하려고 할 때, 때때로 설명 할 계획 보는 것이 좋습니다. Explain 스 계획을 (만드는 감각을) 해석을 통해 가야한다 프로세스 하나는 무엇입니까? "아,이 화려하고있다?"로 무엇을 서 있어야 "아, 그건 옳지 않아."대

해결법

  1. ==============================

    1.전체 tablescans 나쁜 및 인덱스 액세스가 좋은 것을 내가 댓글을 볼 때마다 나는 떤다. 전체 테이블 스캔, 인덱스 범위 스캔, 빠른 전체 인덱스 스캔, 중첩 된 루프, 병합, 해시 등 조인 조인 데이터베이스 구조의 지식과 쿼리의 목적에서와 분석가 이해와 결합되어야 간단하게 액세스 메커니즘은 의미있는 결론에 도달하기 위해.

    전체 tablescans 나쁜 및 인덱스 액세스가 좋은 것을 내가 댓글을 볼 때마다 나는 떤다. 전체 테이블 스캔, 인덱스 범위 스캔, 빠른 전체 인덱스 스캔, 중첩 된 루프, 병합, 해시 등 조인 조인 데이터베이스 구조의 지식과 쿼리의 목적에서와 분석가 이해와 결합되어야 간단하게 액세스 메커니즘은 의미있는 결론에 도달하기 위해.

    종종 맥락에서 아니라 성능 문제를 나타낼 수 있습니다 동안 전체 검사는 단순히 데이터 세그먼트 (테이블 또는 테이블 (하위) 파티션)의 블록의 큰 비율을 읽는 가장 효율적인 방법이며, 이 쿼리의 목표를 달성하기위한 효율적인 메커니즘 여부. 데이터웨어 하우스 및 BI 사람으로 말하기, 성능에 대한 내 번호를 하나의 경고 플래그는 인덱스 기반 액세스 방법 및 중첩 된 루프입니다.

    그래서,은 Oracle 설명서를 계획 설명 읽는 방법의 메커니즘에 대한 좋은 가이드는 다음과 같습니다 http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/ex_plan.htm#PFGRF009

    또한 성능 튜닝 가이드를 읽을 좋은 되세요.

    또한 "카디널리티 피드백",이 계획을 실행하는 동안 경험 한 실제 카디널리티와 쿼리에서 여러 단계에서 기수의 견적을 비교하는 데 사용할 수있는 설명하는 기술에 대한 구글이있다. 볼프강는 Breitling이 방법의 저자이다, 나는 생각합니다.

    그래서 결론 : 액세스 메커니즘을 이해합니다. 데이터베이스를 이해합니다. 쿼리의 의도를 이해합니다. 피 엄지 손가락의 규칙.

  2. ==============================

    2.이 주제는이 같은 질문에 대답하기 너무 큽니다. 당신은 오라클의 성능 튜닝 가이드를 읽을 시간이 좀 걸릴해야

    이 주제는이 같은 질문에 대답하기 너무 큽니다. 당신은 오라클의 성능 튜닝 가이드를 읽을 시간이 좀 걸릴해야

  3. ==============================

    3.두 가지 예는 아래 FULL 스캔 인덱스를 스캔하여 FAST를 나타낸다.

    두 가지 예는 아래 FULL 스캔 인덱스를 스캔하여 FAST를 나타낸다.

    그것은 당신의 비용 및 카디널리티에 집중하는 것이 가장 좋습니다. 예제에서 인덱스의 사용을 찾고 쿼리를 실행의 비용을 줄일 수 있습니다.

    그것은 좀 더 복잡한 (그리고 나는 그것을 100 % 핸들이없는)하지만 기본적으로 비용은 CPU와 IO 비용의 함수이며, 카디널리티 오라클 구문 분석 할 것으로 예상 행 수입니다. 이 두 가지를 줄이는 것은 좋은 일이다.

    쿼리의 비용이 쿼리 및 오라클 최적화 모델에 의해 영향을받을 수 있다는 것을 잊지 마십시오 (예 : 비용 등을 선택) 얼마나 자주 당신은 당신의 통계를 실행합니다.

    예 1 :

    SCAN http://docs.google.com/a/shanghainetwork.org/File?id=dd8xj6nh_7fj3cr8dx_b

    인덱스를 사용하여 실시 예 2 :

    INDEX http://docs.google.com/a/fukuoka-now.com/File?id=dd8xj6nh_9fhsqvxcp_b

    이미 제안 그리고, TABLE SCAN에 대한 조심. 당신은 일반적으로 다음을 피할 수 있습니다.

  4. ==============================

    4.순차적 스캔과 같은 것들을 찾고 다소 도움이되지만 현실은 숫자가 단지 추정 할 때를 제외하고 ... 숫자에 수 있습니다! 무엇 일반적으로 훨씬 더 유용한 쿼리 계획을보고보다 것은 실제 실행에서 찾고있다. 포스트 그레스, 이것은 설명하고 ANALYZE EXPLAIN 차이이다. 실제로 ANALYZE한다고 설명 쿼리를 실행하고 모든 노드에 대한 실시간 타이밍 정보를 가져옵니다. 그 대신 플래너 일어날 것입니다 무슨 생각으로, 실제로 무슨 일이 일어나고 있는지 볼 수 있습니다. 여러 번 당신이 대신 쿼리에 뭔가 다른, 순차적 스캔이 전혀 문제가되지 않는 것을 확인할 수 있습니다.

    순차적 스캔과 같은 것들을 찾고 다소 도움이되지만 현실은 숫자가 단지 추정 할 때를 제외하고 ... 숫자에 수 있습니다! 무엇 일반적으로 훨씬 더 유용한 쿼리 계획을보고보다 것은 실제 실행에서 찾고있다. 포스트 그레스, 이것은 설명하고 ANALYZE EXPLAIN 차이이다. 실제로 ANALYZE한다고 설명 쿼리를 실행하고 모든 노드에 대한 실시간 타이밍 정보를 가져옵니다. 그 대신 플래너 일어날 것입니다 무슨 생각으로, 실제로 무슨 일이 일어나고 있는지 볼 수 있습니다. 여러 번 당신이 대신 쿼리에 뭔가 다른, 순차적 스캔이 전혀 문제가되지 않는 것을 확인할 수 있습니다.

    다른 키는 실제 비용이 단계가 무엇인지 확인한다. 많은 그래픽 도구는 계획 비용이 얼마나 다른 부분을 표시하기 위해 다른 크기의 화살표를 사용합니다. 이 경우, 단지 얇은 화살표오고 두꺼운 화살표가 떠나이 단계를 찾습니다. 당신이 GUI를 사용하지 않는 경우에는 숫자와 그들이 갑자기 훨씬 더 큰 얻을 경우에 대한보고 안구해야합니다. 약간의 연습으로는 문제 영역을 선택하는 매우 쉽게된다.

  5. ==============================

    5.정말이 같은 문제에 대해 할 수있는 가장 좋은 것은 ASKTOM입니다. 특히 그 질문에 대한 그의 대답은 규칙의 그 종류의 많은 설명하는 온라인 오라클 문서에 대한 링크가 포함되어 있습니다.

    정말이 같은 문제에 대해 할 수있는 가장 좋은 것은 ASKTOM입니다. 특히 그 질문에 대한 그의 대답은 규칙의 그 종류의 많은 설명하는 온라인 오라클 문서에 대한 링크가 포함되어 있습니다.

    , 한 가지 유념해야 할 점은 계획이 정말 최고의 추측있는 설명이다.

    그것은 좋은 생각이 AUTOTRACE 명령을 SQLPLUS, 실험을 사용하는 방법을 배우게하는 것입니다. 일부 하드 숫자로, 당신은 일반적으로 더 나은 결정을 내릴 수 있습니다.

    하지만 당신은 ASKTOM한다. 그는 그것에 대해 모든 것을 알고 :)

  6. ==============================

    6.(가) 설명의 출력은 각 단계가 취한 시간을 알려줍니다. 우선 오랜 시간 촬영하고 그 의미를 이해 한 단계를 찾을 수 있습니다. 그것은 주로 특정 데이터베이스와 경험에 대한 연구의 문제입니다 - 순차적 같은 상황이 더 나은 인덱스를 알 수 스캔합니다.

    (가) 설명의 출력은 각 단계가 취한 시간을 알려줍니다. 우선 오랜 시간 촬영하고 그 의미를 이해 한 단계를 찾을 수 있습니다. 그것은 주로 특정 데이터베이스와 경험에 대한 연구의 문제입니다 - 순차적 같은 상황이 더 나은 인덱스를 알 수 스캔합니다.

  7. ==============================

    7.하나는 "오, 아니, 옳지 않아 그"테이블 스캔의 형태로 종종 있습니다. 테이블 스캔은 특별한 인덱스를 사용하지 않는 메모리 캐시의 모든 유용의 정화에 기여할 수있다. PostgreSQL을, 예를 들어, 당신은 다음과 같습니다 찾을 수 있습니다.

    하나는 "오, 아니, 옳지 않아 그"테이블 스캔의 형태로 종종 있습니다. 테이블 스캔은 특별한 인덱스를 사용하지 않는 메모리 캐시의 모든 유용의 정화에 기여할 수있다. PostgreSQL을, 예를 들어, 당신은 다음과 같습니다 찾을 수 있습니다.

    Seq Scan on my_table  (cost=0.00..15558.92 rows=620092 width=78)
    

    때로는 테이블 스캔은 이상적인 이상 행을 조회하는 인덱스를 사용하여 말할 수 있습니다. 그러나 이것은 당신이 찾고있는 것 같다 것을 그 붉은 깃발 패턴 중 하나입니다.

  8. ==============================

    8.기본적으로, 각 동작을 살펴보고 작업 "메이크업 감각"이 작업을 수행 할 수 방법에 대한 지식을 제공되는지 확인합니다.

    기본적으로, 각 동작을 살펴보고 작업 "메이크업 감각"이 작업을 수행 할 수 방법에 대한 지식을 제공되는지 확인합니다.

    테이블에 - 예를 들어, 각각의 열 C 및 D (AC = BD), 및 계획 쇼 클러스터 인덱스 스캔에 두 개의 테이블, A와 B에 가입하는 경우 (확실하지 신탁 기간의 SQL 서버 용어) A는 다음 중첩 루프 클러스터 된 인덱스의 일련의 테이블 B에 추구에, 당신은 문제가 있었다 생각에 가입. 이 시나리오에서는 엔진 (조인 컬럼에 인덱스 이상) 인덱스 스캔 한 쌍을 병합 조인을 다음에 기대 수 있습니다. 추가 조사는 최적화 패턴, 또는 실제로 존재하지 않는 인덱스를 조인 선택하고 잘못된 통계를 공개 할 수도 있습니다.

  9. ==============================

    9.계획의 각 항에 소요되는 시간의 비율을 보면, 엔진이 무엇을하고 있는지 고려한다. 를 검색하고있다가 테이블을 스캔하는 경우, 예를 들어, 필드에 인덱스를 넣어 고려 (들)

    계획의 각 항에 소요되는 시간의 비율을 보면, 엔진이 무엇을하고 있는지 고려한다. 를 검색하고있다가 테이블을 스캔하는 경우, 예를 들어, 필드에 인덱스를 넣어 고려 (들)

  10. ==============================

    10.나는 주로 인덱스 또는 테이블 스캔을 찾습니다. 이것은 일반적으로 내가 어디에 문 또는 가입 문에있어 중요한 컬럼에 인덱스를 누락 알려줍니다.

    나는 주로 인덱스 또는 테이블 스캔을 찾습니다. 이것은 일반적으로 내가 어디에 문 또는 가입 문에있어 중요한 컬럼에 인덱스를 누락 알려줍니다.

    http://www.sql-server-performance.com/tips/query_execution_plan_analysis_p1.aspx에서 :

  11. ==============================

    11.(당신은 아마 너무 세부 사항을 읽어 보시기 바랍니다 :

    (당신은 아마 너무 세부 사항을 읽어 보시기 바랍니다 :

    여러 대형 테이블의 테이블 스캔

    고유 인덱스를 사용하여 지수는 필요한 모든 필드를 포함

    내가 본 성능 문제의 약 90 %에서, 가장 쉬운 승리는이 작은 쿼리와 임시 테이블에 테이블의 많은 쿼리 (4 인 이상)을 해체하는 것입니다.

  12. from https://stackoverflow.com/questions/79266/how-do-you-interpret-a-querys-explain-plan by cc-by-sa and MIT license