역 모델에는 쿼리 작성에 대한 컬렉션 기반 접근 방식과 절차적 접근 방식 간에 차이가 있다는 사실이 암시되어 있습니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!