> 데이터 베이스 > MySQL 튜토리얼 > SQL COUNT(*)가 느린 이유는 무엇이며 속도를 높이는 방법은 무엇입니까?

SQL COUNT(*)가 느린 이유는 무엇이며 속도를 높이는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-26 20:19:12
원래의
522명이 탐색했습니다.

Why is SQL COUNT(*) Slow, and How Can I Speed It Up?

SQL Count(*) 성능: 느린 이유와 개선 방법

큰 테이블을 다룰 때는 다음 사항을 이해하는 것이 중요합니다. 'COUNT()'와 같은 특정 쿼리가 성능에 미치는 영향. 이 문서에서는 간단한 'COUNT()' 쿼리가 해당 매개변수에 따라 상당한 성능 차이를 초래할 수 있는 이유를 살펴봅니다.

주어진 예에서 쿼리 'if (select count() from BookChapters) = 0'은 SQL Server가 '존재하는 경우(BookChapters에서 선택)'로 최적화하기 때문에 빠르게 실행됩니다. 이 최적화된 버전은 모든 행을 계산하는 대신 단일 행만 검색합니다.

그러나 'if (select count() from BookChapters) = 1' 및 'if(select count() ) BookChapters에서) > 1'은 SQL Server가 다른 논리를 사용하기 때문에 수행 속도가 느려집니다. 테이블에 비클러스터형 인덱스가 없으면 SQL Server는 'COUNT(*)' 작업에 가장 좁은 비클러스터형 인덱스를 사용합니다. 비클러스터형 인덱스가 없으면 전체 테이블을 스캔해야 하므로 대규모 데이터 세트의 경우 시간이 많이 걸릴 수 있습니다.

카운트(*) 속도 최적화

개선하려면 'COUNT(*)' 쿼리의 성능을 고려하려면 다음 전략을 고려하세요.

  • 비클러스터형 인덱스: SQL Server는 비클러스터형 인덱스를 사용하여 검색 범위를 좁히고 테이블 스캔을 줄일 수 있습니다.
  • 시스템 테이블 sysindexes 사용: 이 테이블은 행 수를 제공합니다. 전체 테이블 스캔의 오버헤드를 발생시키지 않고. SQL Server 2005 이상에서는 다음 쿼리를 사용합니다.
SELECT OBJECT_NAME(i.id) [Table_Name], i.rowcnt [Row_Count]
FROM sys.sysindexes i WITH (NOLOCK)
WHERE i.indid in (0,1)
ORDER BY i.rowcnt desc
로그인 후 복사
  • SQL Server 2000의 경우:
SELECT OBJECT_NAME(i.id) [Table_Name], i.rows [Row_Count]
FROM sysindexes i (NOLOCK)
WHERE i.indid in (0,1)
ORDER BY i.rows desc
로그인 후 복사

이러한 기술을 활용하면 특히 대규모 쿼리에서 'COUNT(*)' 쿼리의 실행 시간을 크게 단축할 수 있습니다. 데이터 세트.

위 내용은 SQL COUNT(*)가 느린 이유는 무엇이며 속도를 높이는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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