> 데이터 베이스 > MySQL 튜토리얼 > MySQL의 WHERE와 HAVING: 계산된 열에 각 절을 언제 사용해야 합니까?

MySQL의 WHERE와 HAVING: 계산된 열에 각 절을 언제 사용해야 합니까?

Linda Hamilton
풀어 주다: 2025-01-19 22:42:09
원래의
677명이 탐색했습니다.

WHERE vs. HAVING in MySQL: When Should I Use Each Clause for Calculated Columns?

MySQL WHERE와 HAVING: 계산된 열을 사용하여 쿼리 최적화

MySQL 데이터베이스 작업에서 WHEREHAVING 절 사이의 선택은 계산 열을 처리할 때 쿼리 효율성에 큰 영향을 미칩니다. 최적화된 SQL을 작성하려면 이들의 고유한 역할을 이해하는 것이 중요합니다.

계산된 열의 전략적 배치

SELECT 문 내에서 생성된 열(예: SELECT 1 AS "number")과 같은 계산된 열은 일반적으로 HAVING이 아닌 WHERE 절 뒤에 와야 합니다. 이는 WHERE에서는 계산이나 집계 데이터를 필터링하는 반면, HAVING에서는 이러한 작업 를 필터링하기 때문입니다.

WHERE 절의 한계

계산된 열에 WHERE을 사용하면 오류가 발생하는 경우가 많습니다. WHERE 조건은 기존 테이블 열이나 별칭을 참조해야 합니다. 계산된 값에 직접 연산을 수행할 수 없습니다.

WHERE와 HAVING의 주요 차이점

  • WHERE 절: 문이 실행되기 전에SELECT 행을 필터링합니다. 조건은 모든 테이블 열에 적용할 수 있지만 SELECT 목록

    내에 정의된 계산 열에는 적용할 수 없습니다.
  • HAVING 절: 문과 집계 함수가 적용된 SELECT 행을 필터링합니다. 선택한 열, 별칭 또는 집계 함수 결과에 조건을 적용할 수 있습니다.

성능 고려 사항

큰 테이블의 경우 WHERE 절에 계산된 열을 배치하면 계산 비용이 많이 들 수 있습니다. HAVING은 축소된 데이터 세트(SELECT 문의 결과)에서 작동하여 불필요한 행 필터링을 최소화하므로 이러한 시나리오에서 성능 이점을 제공합니다.

예시

샘플 테이블을 살펴보겠습니다.

<code class="language-sql">CREATE TABLE `table` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `value` int(10) unsigned NOT NULL,
 PRIMARY KEY (`id`),
 KEY `value` (`value`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;</code>
로그인 후 복사

10개의 행으로 채워집니다(ID 및 값 범위는 1~10):

<code class="language-sql">INSERT INTO `table`(`id`, `value`) VALUES (1, 1),(2, 2),(3, 3),(4, 4),(5, 5),(6, 6),(7, 7),(8, 8),(9, 9),(10, 10);</code>
로그인 후 복사

다음 쿼리는 동일한 결과를 산출합니다.

<code class="language-sql">SELECT `value` v FROM `table` WHERE `value`>5; -- Returns 5 rows
SELECT `value` v FROM `table` HAVING `value`>5; -- Returns 5 rows</code>
로그인 후 복사

그러나 EXPLAIN에서는 결정적인 성능 차이가 드러납니다.

<code class="language-sql">EXPLAIN SELECT `value` v FROM `table` WHERE `value`>5;  -- Uses index but scans more rows
EXPLAIN SELECT `value` v FROM `table` HAVING `value`>5; -- Uses index efficiently, scans fewer rows</code>
로그인 후 복사

둘 다 인덱스를 사용하는 반면, WHERE는 테이블의 더 큰 부분을 스캔하여 필터링하는 반면, HAVING는 사전 필터링된 더 작은 하위 집합에서 더 효율적으로 작동합니다. 이러한 차이는 데이터 세트가 클수록 점점 더 뚜렷해집니다. 따라서 계산 열의 경우 HAVING가 일반적으로 더 나은 성능을 제공합니다.

위 내용은 MySQL의 WHERE와 HAVING: 계산된 열에 각 절을 언제 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿