>  기사  >  시스템 튜토리얼  >  최종 가이드 - 더 나은 SQL 쿼리를 작성하는 방법은 무엇입니까?

최종 가이드 - 더 나은 SQL 쿼리를 작성하는 방법은 무엇입니까?

王林
王林앞으로
2024-01-12 12:15:04387검색
수집 및 프로그램 방식에 따른 쿼리

역 모델에는 쿼리 작성에 대한 컬렉션 기반 접근 방식과 절차적 접근 방식 간에 차이가 있다는 사실이 암시되어 있습니다.

  • 질의에 대한 절차적 접근 방식은 프로그래밍과 매우 유사한 접근 방식입니다. 즉, 수행해야 할 작업과 수행 방법을 시스템에 알려줍니다. 예를 들어 이전 기사의 예와 같이 한 함수를 실행한 후 다른 함수를 호출하여 데이터베이스를 쿼리하거나 루프, 조건 및 사용자 정의 함수(UDF)를 포함하는 논리적 접근 방식을 사용하여 최종 쿼리 결과를 얻습니다. 이런 방식으로 항상 각 계층의 데이터 하위 집합을 요청한다는 것을 알 수 있습니다. 이 접근 방식은 종종 단계별 또는 행별 쿼리라고도 합니다.
  • 다른 하나는 수행해야 하는 작업만 지정하면 되는 컬렉션 기반 접근 방식입니다. 이 방법으로 해야 할 일은 쿼리를 통해 얻고자 하는 결과에 대한 조건과 요구 사항을 지정하는 것입니다. 데이터를 검색할 때 쿼리를 구현하는 내부 메커니즘에 주의할 필요가 없습니다. 데이터베이스 엔진은 쿼리를 실행하는 데 가장 적합한 알고리즘과 논리를 결정합니다.

SQL은 집합 기반이므로 이 접근 방식은 절차적 접근 방식보다 더 효율적입니다. 이는 어떤 경우에는 SQL이 코드보다 빠르게 작동할 수 있는 이유를 설명합니다.

세트 기반 쿼리 방법은 데이터 마이닝 분석 업계에서 숙달해야 하는 기술이기도 합니다! 왜냐하면 이 두 가지 방법을 전환하는 데 능숙해야 하기 때문입니다. 쿼리에 절차적 쿼리가 있는 경우 이 부분을 다시 작성해야 하는지 고려해야 합니다.

최종 가이드 - 더 나은 SQL 쿼리를 작성하는 방법은 무엇입니까?

질의부터 실행계획까지

역방향 모드는 정적이 아닙니다. SQL 개발자가 되기 위한 과정에서 쿼리 역방향 모델을 피하고 쿼리를 다시 작성하는 것은 어려운 작업이 될 수 있습니다. 따라서 보다 구조화된 방식으로 쿼리를 최적화하기 위해 도구를 사용해야 하는 경우가 많습니다.

성능에 대해 생각하려면 보다 체계적인 접근 방식뿐만 아니라 더 심층적인 접근 방식도 필요합니다.

그러나 이 구조적이고 심층적인 접근 방식은 주로 쿼리 계획을 기반으로 합니다. 쿼리 계획은 먼저 "구문 분석 트리"로 구문 분석되고 각 작업에 사용되는 알고리즘과 작업이 조정되는 방식을 정확하게 정의합니다.

쿼리 최적화

쿼리를 최적화할 때 최적화 프로그램에서 생성된 계획을 수동으로 검사해야 할 가능성이 높습니다. 이 경우 쿼리 계획을 확인하여 쿼리를 다시 분석해야 합니다.

이러한 쿼리 계획을 익히려면 데이터베이스 관리 시스템에서 제공하는 일부 도구를 사용해야 합니다. 사용할 수 있는 몇 가지 도구는 다음과 같습니다.

  • 일부 소프트웨어 패키지에는 쿼리 계획의 그래픽 표현을 생성할 수 있는 도구가 있습니다.
  • 다른 도구는 쿼리 계획에 대한 텍스트 설명을 제공할 수 있습니다.

PostgreSQL을 사용하는 경우 다양한 EXPLAIN을 구별할 수 있으며, 계획을 실행하지 않고도 플래너가 쿼리를 실행하는 방법에 대한 설명만 얻을 수 있습니다. 동시에 EXPLAIN ANALYZE는 쿼리를 실행하고 쿼리 계획과 실제 쿼리 계획을 평가하는 분석 보고서를 반환합니다. 일반적으로 실제 실행 계획은 실제로 계획을 실행하며, 평가 실행 계획은 쿼리를 실행하지 않고도 이 문제를 해결할 수 있습니다. 논리적으로 실제 실행 계획에는 쿼리가 실행될 때 실제로 발생한 일에 대한 추가 세부 정보와 통계가 포함되어 있으므로 더 유용합니다.

다음으로 XPLAIN 및 ANALYZE에 대해 자세히 알아보고 이 두 명령을 사용하여 쿼리 계획과 쿼리 성능을 더 자세히 이해하는 방법을 알아봅니다. 이렇게 하려면 one_million 및 half_million이라는 두 테이블을 사용하여 몇 가지 예를 수행해야 합니다.

EXPLAIN을 사용하여 one_million 테이블의 현재 정보를 검색할 수 있습니다. 쿼리를 실행할 때 이 정보를 첫 번째 위치에 넣어야 하며, 실행이 완료된 후 쿼리 계획으로 반환됩니다.

으아악

위 예에서 쿼리 비용은 0.00..18584.82, 행 수는 1025082, 열 너비는 36임을 알 수 있습니다.

동시에 ANALYZE를 사용하여 통계 정보를 업데이트할 수도 있습니다.

으아악

EXLAIN 및 ANALYZE 외에도 EXPLAIN ANALYZE를 사용하여 실제 실행 시간을 검색할 수도 있습니다.

으아악

EXPLAIN ANALYZE 사용의 단점은 실제로 쿼리를 실행해야 한다는 점인데, 이는 주목할 가치가 있습니다!

지금까지 본 모든 알고리즘은 순차적 스캔 또는 전체 테이블 스캔입니다. 이는 데이터베이스에서 스캔하는 방법으로, 스캔된 테이블의 각 행을 순차적(직렬) 순서로 읽고 각 열을 확인합니다. 조건에 맞는지 확인해보세요. 성능 측면에서 순차 스캔은 테이블 전체를 스캔해야 하기 때문에 최선의 실행 계획은 아닙니다. 그러나 느린 디스크를 사용하면 순차 읽기도 빨라집니다.

다른 알고리즘의 몇 가지 예가 있습니다:

으아악

쿼리 최적화 프로그램이 Hash Join을 선택한 것을 볼 수 있습니다. 쿼리의 시간 복잡도를 평가하기 위해 이 작업을 사용해야 하므로 이 작업을 기억하세요. 위 예에서는 half_million.counter 인덱스가 없다는 것을 확인했습니다. 아래 예에서 인덱스를 추가할 수 있습니다.

으아악

쿼리 최적화 프로그램은 인덱스를 생성하여 인덱스 스캔 시 병합 조인을 찾는 방법을 결정했습니다.

인덱스 스캔과 전체 테이블 스캔(순차 스캔)의 차이점에 유의하세요. 후자("테이블 스캔"이라고도 함)는 모든 데이터를 스캔하거나 모든 페이지를 인덱싱하여 적합한 결과를 찾는 반면, 전자는 테이블의 각 행만 스캔합니다. 탁자.

튜토리얼의 두 번째 부분이 여기에 소개됩니다. "더 나은 SQL 쿼리를 작성하는 방법" 시리즈의 마지막 기사가 이어질 예정이므로 계속 지켜봐 주시기 바랍니다.

재인쇄 출처를 밝혀주세요: Grape City Control

위 내용은 최종 가이드 - 더 나은 SQL 쿼리를 작성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 linuxprobe.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제