Partition By 절을 사용하면 쿼리 성능을 향상시킬 수 있습니다. 이는 스토리지 요구 사항을 줄이고 데이터 관리 효율성을 향상시킵니다. 큰 테이블을 분할하면 데이터의 작은 부분에만 액세스하는 쿼리를 더 빠르게 실행할 수 있습니다. 또한 파티셔닝은 백업 및 복구 시간을 줄여줍니다. 이번 글에서는 MySQL의 Partition By 절에 대해 구문과 다양한 예제를 통해 설명하겠습니다.
PARTITION BY 절의 목적은 테이블의 행을 별도의 파티션으로 그룹화하는 것입니다. 이는 동일한 파티션의 다른 행을 사용하여 파티션 내의 특정 행에 대해 계산을 수행할 때 특히 유용합니다.
PARTITION BY 절은 항상 OVER() 절 내에서 사용해야 합니다. PARTITION BY 절에 의해 생성된 파티션을 창이라고도 합니다. 이 절은 특히 RANK(), LEAD() 및 LAG()와 같은 창 함수에서 작동합니다.
OVER() 절에서 PARTITION BY 절을 제외하면 테이블 전체가 하나의 파티션으로 처리됩니다.
order_clause 및frame_clause는 문법의 선택적 구성 요소입니다.
MySQL에서 Partition 절의 표현식은 열 이름이거나 내장 함수일 수 있습니다. 그러나 표준 SQL에서는 표현식에 열 이름만 허용됩니다.
"해커" 테이블을 예로 들어보겠습니다 -
h_id |
h_name |
challenge_id |
점수 |
---|---|---|---|
3 |
라주 |
111 |
20 |
2 |
미슈레쉬 |
111 |
80 |
5 |
루드라 |
112 |
40 |
5 |
모한 |
114 |
90 |
4 |
로한 |
112 |
30 |
1 |
소한 |
112 |
40 |
각 챌린지에서 각 해커의 순위를 결정해야 합니다. 즉, 챌린지에 참여한 모든 해커와 해당 챌린지에서의 각자의 순위를 나열해야 합니다.
이를 달성하기 위해 다음 쿼리를 사용합니다.
으아악이 쿼리에서 partition by 절은 테이블을 Challenge_id별로 그룹화합니다.
order by 절은 각 파티션의 해커를 점수 내림차순으로 정렬합니다.
over() 절은 창 함수 Rank()에 대해 테이블 행을 분할하고 정렬하는 방법을 지정합니다.
창 함수density_rank()는 챌린지의 순서가 지정된 파티션에 있는 각 해커에게 순위를 할당합니다. 두 명의 해커가 동일한 점수를 갖고 있는 경우 동일한 순위가 할당됩니다.
결과 출력에는 모든 해커 목록과 각 챌린지에 대한 해당 순위가 표시됩니다. -
challenge_id |
h_id |
h_name |
점수 |
랭킹 |
---|---|---|---|---|
111 |
2 |
미슈레쉬 |
80 |
1 |
111 |
3 |
라주 |
20 |
2 |
112 |
루드라 |
40 |
1 |
|
112 |
1 |
소한 |
40 |
1 |
112 | 4 |
로한 |
30 |
2 |
114 |
5 |
모한 |
90 |
1 |
그래서 우리는 모든 해커 목록과 각 개별 챌린지에서의 순위를 얻을 수 있었습니다.
파티션 내의 특정 행에 대한 계산을 수행하려면 테이블의 행을 별도의 파티션으로 그룹화하세요.
저장 공간 요구 사항을 줄이고 데이터 관리 효율성을 향상시킵니다.
데이터의 일부에만 더 빠르게 액세스하는 쿼리를 실행하여 쿼리 성능을 향상하세요.
백업 및 복구 시간을 줄입니다.
위 내용은 MySQL PARTITION BY 자구의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!