>  기사  >  데이터 베이스  >  뷰 쿼리가 직접 테이블 쿼리와 비교하여 성능 불일치를 나타내는 이유는 무엇입니까?

뷰 쿼리가 직접 테이블 쿼리와 비교하여 성능 불일치를 나타내는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-23 23:13:29281검색

Why Does a View Query Exhibit a Performance Discrepancy Compared to a Direct Table Query?

MySQL 보기 쿼리 성능 불일치

문제:

약 100,000명의 사용자가 포함된 데이터베이스 테이블 레코드는 직접 쿼리와 보기를 사용하는 쿼리 사이에 상당한 성능 차이를 나타냅니다. 테이블에 직접 액세스하는 쿼리의 계획 비용은 5200이고, 뷰에 액세스하는 쿼리의 계획 비용은 100,000입니다.

설명:

성능 불일치는 뷰를 수행하는 데 사용된 알고리즘으로 인해 발생합니다. 이 경우 뷰는 WHERE 절에 지정된 필터링 작업을 수행하기 전에 기본 테이블의 모든 행을 임시 테이블로 검색하는 "temptable" 알고리즘을 사용합니다. 반면, 직접 쿼리는 기본 테이블의 인덱싱된 데이터에 대해 직접 필터링 작업을 수행하는 "병합" 알고리즘을 사용합니다.

뷰의 WHERE 절

뷰의 WHERE 절은 뷰가 기본 테이블에서 모든 행을 검색한 후에 적용됩니다. 즉, 특정 필터 기준을 사용하여 뷰를 생성했더라도 뷰에 대한 쿼리의 WHERE 절은 임시 테이블에서 검색된 각 행에 계속 적용됩니다.

해결 방법

이 성능 문제를 해결하려면 "병합" 알고리즘을 사용하여 뷰를 생성해야 합니다. 이는 "구체화된 뷰" 옵션을 사용하여 달성할 수 있습니다. 구체화된 뷰는 뷰의 미리 계산된 복사본입니다. 구체화된 뷰에 대한 쿼리는 필터링을 위해 "병합" 알고리즘을 사용할 수 있도록 물리적 테이블에 저장됩니다.

예:

구체화된 뷰를 생성하려면 "병합" 알고리즘을 사용하면 다음 구문을 사용합니다.

<code class="sql">CREATE MATERIALIZED VIEW vw_users AS
SELECT state, COUNT(*) AS cnt
FROM users
GROUP BY state;</code>

구체화된 뷰가 생성되면 이에 대한 쿼리는 계획 비용이 낮아지고 성능이 향상됩니다.

위 내용은 뷰 쿼리가 직접 테이블 쿼리와 비교하여 성능 불일치를 나타내는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.