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

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

Barbara Streisand
Barbara Streisand원래의
2024-12-26 04:04:09974검색

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

SQL 개수(*) 성능 이해

행이 2천만 개가 넘는 테이블에 대해 개수 연산을 실행하는 쿼리를 생각해 보겠습니다. 실행 시간은 카운트 표현식에 따라 크게 달라지며, 비교가 필요한 표현식(예: count(*) = 1)의 경우 상당한 지연이 발생합니다.

느린 실행의 근본 원인

이러한 성능 차이에 대한 설명은 SQL Server에서 사용하는 최적화 기술에 있습니다. 첫 번째 쿼리(count() = 0)의 경우 서버는 이를 계산하는 대신 모든 행(존재(BookChapters에서 선택))이 있는지 확인하도록 쿼리를 최적화합니다.

In 대조적으로, 다른 쿼리(count() = 1 또는 count() > 1)의 경우 SQL Server는 비클러스터형 인덱스를 사용하여 행 수를 세어보세요. 그러나 이 경우 테이블에는 비클러스터형 인덱스가 없기 때문에 서버가 테이블 전체를 스캔해야 하므로 실행 시간이 상당히 길어집니다.

성능 개선

count(*) 쿼리 성능 향상:

  • 최적화 사용 쿼리: 비교(개수() = 0인 경우) 대신 존재 확인(존재하는 경우(BookChapters에서 선택))을 선호합니다.
  • 비클러스터형 인덱스 생성: 적절한 열에 비클러스터형 인덱스를 도입하여 행 계산 향상 효율성.

빠른 행 수 계산을 위한 대체 방법

  • sysindexes 시스템 테이블: sysindexes 테이블을 활용하여 신속하게 행 가져오기 클러스터링된 테이블의 개수 indexes.
  • partition spart 행 합계: 분할된 테이블의 경우 sys.partitions 테이블(spart)의 행 값을 합산하여 빠른 행 수를 얻습니다.
  • sysindexes의 최대 ROWS: SQL 2000에서는 다음에서 최대 ROWS 값을 검색합니다. sysindexes 테이블을 사용하여 현재 행 수를 대략적으로 계산합니다(업데이트 빈도에 따라 달라질 수 있음).

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

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