>데이터 베이스 >MySQL 튜토리얼 >데이터베이스 인덱싱은 쿼리 성능을 어떻게 향상시키며 언제 사용해야 합니까?

데이터베이스 인덱싱은 쿼리 성능을 어떻게 향상시키며 언제 사용해야 합니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-23 15:38:14769검색

How Does Database Indexing Improve Query Performance and When Should It Be Used?

데이터베이스 인덱스: 작동 원리 및 적용 시나리오

데이터베이스 인덱싱은 데이터베이스 쿼리 성능을 향상시키기 위해 데이터를 특정 방식으로 구성하는 기술입니다. 데이터베이스의 크기가 증가함에 따라 데이터 검색 및 검색 속도가 크게 빨라지기 때문에 인덱싱이 중요해졌습니다.

지수의 중요성

데이터가 디스크에 저장되면 데이터 블록으로 나누어집니다. 이러한 데이터 블록에 액세스하려면 전체 블록을 완전히 읽어야 하며 이는 시간이 많이 걸리는 프로세스입니다. 정렬되지 않은 데이터를 검색하려면 큰 데이터 블록을 검색하는 선형 검색이 필요하며 비효율적입니다.

데이터베이스 인덱스란 무엇인가요?

색인을 사용하면 특정 필드의 데이터를 정렬하여 더 빠른 데이터 검색이 가능합니다. 필드에 인덱스가 생성되면 필드 값과 해당 레코드 포인터를 포함하는 추가 데이터 구조가 생성됩니다. 이 인덱스 구조는 이진 검색을 수행할 수 있도록 정렬되어 성능이 크게 향상됩니다.

색인 작동 방식

다음 샘플 데이터베이스 테이블을 고려해 보세요.

字段名 数据类型 大小
id 无符号INT 4 字节
firstName Char(50) 50 字节
lastName Char(50) 50 字节
emailAddress Char(100) 100 字节

MyISAM 엔진을 사용하여 5,000,000개의 레코드가 있는 테이블이 있다고 가정합니다(기본 블록 크기는 1,024바이트). ID 값(정렬된 키 필드)을 검색하는 데 필요한 평균 데이터 블록 액세스 횟수는 20회이며, 이는 선형 검색에 필요한 500,000회 액세스보다 훨씬 낮습니다.

그러나 firstName과 같이 정렬되지 않은 키가 아닌 필드를 검색하려면 전체 테이블을 검색해야 합니다(블록 액세스 1,000,000회). 여기서 인덱스가 작동합니다.

firstName의 인덱스는 다음과 같은 구조를 갖습니다.

字段名 数据类型 大小
firstName Char(50) 50 字节
(记录指针) 特殊 4 字节

인덱스를 사용하면 firstName 값을 검색하는 데 평균 20번의 블록 액세스만 필요한 이진 검색이 가능합니다. 이는 인덱싱되지 않은 테이블에 필요한 1,000,000개의 액세스에 비해 크게 개선된 것입니다.

색인을 사용하는 경우

인덱싱은 쿼리 성능을 향상시킬 수 있지만 오버헤드(추가 디스크 공간 및 처리 시간)도 발생합니다. 인덱스는 다음 요소를 기반으로 신중하게 선택해야 합니다.

  • WHERE 절에 사용되는 필드: 필터링에 자주 사용되는 인덱싱 필드는 쿼리 성능을 크게 향상시킬 수 있습니다.
  • 카디널리티: 카디널리티가 높은(더 많은 고유 값) 필드는 반환되는 레코드 수를 줄여 이진 검색을 더 효율적으로 만들기 때문에 인덱싱에 더 적합합니다.
  • 출력에서 사용되지 않는 필드: 출력에만 사용되는 인덱싱 필드를 피하면 디스크 공간을 절약하고 삽입 및 삭제 작업 중 처리 시간을 줄일 수 있습니다.

위 내용은 데이터베이스 인덱싱은 쿼리 성능을 어떻게 향상시키며 언제 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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