데이터베이스 index 예제

인덱스는 인덱스를 만들 때 지정하는 필드 표현식으로 정의됩니다. 일반적으로 필드 표현식은 EMP_ID와 같은 단일 필드 이름입니다. 예를 들어 EMP_ID 필드에 만든 인덱스에는 테이블의 직원 ID 값정렬 목록이 포함됩니다. 목록의 각 값에는 해당 값을 포함하는 레코드에 대한 참조가 함께 제공됩니다. 예를 들어 이전에 설명한 쿼리는 Employee_Name 열에 생성된 해시 인덱스의 이점을 활용할 수 있습니다. 해시 인덱스가 작동하는 방식은 열 값이 해시 테이블의 키가 되고 해당 키에 매핑된 실제 값은 테이블의 행 데이터에 대한 포인터일 뿐입니다. 해시 테이블은 기본적으로 연관 배열이므로 일반적인 항목은 “Abc => 0x28939″와 같이 보이며 0x28939는 Abc가 메모리에 저장되는 테이블 행을 참조합니다. 해시 테이블 인덱스에서 “Abc”와 같은 값을 찾고 메모리의 행에 대한 참조를 가져오는 것이 Employee_Name 열에서 “Abc”값을 가진 모든 행을 찾기 위해 테이블을 검색하는 것보다 훨씬 빠릅니다. 인덱스는 데이터 검색 속도를 크게 높일 수 있으므로 각 테이블에 대해 올바른 인덱스가 정의되는 것이 필수적입니다.

누락된 인덱스는 작은 데이터베이스에서는 발견되지 않지만 테이블크기가 커지면 쿼리시간이 훨씬 더 오래 걸릴 수 있습니다. 조인 성능을 향상 하려면 From 절에서 두 번째 테이블의 조인 필드에 인덱스가 필요 합니다. From 절에 세 번째 테이블이 있는 경우 드라이버는 이전 테이블에 조인하는 세 번째 테이블의 필드에 대한 인덱스도 사용합니다. 예를 들어 인덱스 레코드에 인덱싱된 필드와 원래 레코드에 대한 포인터만 포함되어 있다는 점을 감안할 때 인덱스 레코드가 가리키는 다중 필드 레코드보다 작을 수 있습니다. 따라서 인덱스 자체는 원래 테이블보다 적은 디스크 블록을 필요로 하므로 반복하기 위해 더 적은 블록 액세스가 필요합니다. firstName 필드의 인덱스스키마는 아래에 설명되어 있습니다. 테이블이 인덱싱되지 않은 경우 어쨌든 최적화된 쿼리로 행의 순서를 식별할 수 없으므로 쿼리는 행을 선형으로 검색해야 합니다. 즉, 쿼리는 조건과 일치하는 행을 찾기 위해 모든 행을 검색해야합니다. 당신은이 시간이 걸릴 것이라고 상상할 수 있습니다. 모든 행을 살펴보는 것은 그리 효율적이지 않습니다.

데이터베이스 드라이버는 인덱스를 사용하여 레코드를 빠르게 찾을 수 있습니다. 예를 들어 EMP_ID 필드의 인덱스는 드라이버가 특정 직원 ID 값을 검색하는 데 소요되는 시간을 크게 줄입니다. 다음 Where 절을 고려하십시오: 따라서 우리가 찾고있는 값이 인덱스 (예 : `예수`)에서 발견되는 경우 같은 행에있는 다른 값 (예 : 예수 및 나이)을 어떻게 찾을 수 있습니까? 데이터베이스 인덱스는 테이블의 해당 행에 대한 포인터도 저장합니다.