그러나 문서의 값을 찾고 JSON을 임시로 검색할 수 있습니다. 이를 돕기 위해 Oracle Database 12.2에서 JSON 데이터에 대한 인덱스를 만들 수 있습니다. 쉽게 수행할 수 있습니다: 인덱스는 리프 블록당 최대 한 번씩 특정 접두사를 저장합니다. B 트리 인덱스의 리프 블록에 있는 키만 압축됩니다. 분기 블록에서 키 접미사를 잘릴 수 있지만 키는 압축되지 않습니다. 아래 SQL 문은 “사람” 테이블의 “성” 열에 “idx_lastname”이라는 인덱스를 만듭니다. 모든 특성은 고유한 열이 아닌 문서의 일부입니다. 이렇게 하면 값을 인덱싱하기가 까다로울 수 있습니다. 따라서 특정 값이 있는 문서를 검색하는 속도가 느려질 수 있습니다.

검색한 특성에 함수 기반 인덱스를 만들어 이 문제를 극복할 수 있습니다. 인덱스 압축: 예를 들어 압축 절을 사용 하 고 ord_customer_ix_demo 인덱스를 만들려면 다음 문을 발급할 수 있습니다. 기본 테이블과 일치합니다. 기본적으로 분할되지 않은 인덱스는 전역 인덱스입니다. 기본적으로 인덱스는 B-트리입니다. 이들은 균형잡힌다. 즉, 모든 리프 노드가 트리의 깊이가 동일합니다. 따라서 모든 값에 액세스하는 작업량(O(log n))과 동일한 양입니다. 모든 null을 포함하는 행은 쿼리 결과 집합에 나타나지 않아야 합니다. 이 결과를 보장하려면 인덱스의 하나 이상의 열이 있어야 합니다.

성별은 일반적입니다. 이 경우 customers.cust_gender 열은 비트맵 인덱스의 후보가 됩니다. hash_products는 분할된 테이블이므로 비트맵 조인 인덱스를 로컬로 분할해야 합니다. 이 예제에서는 지정된 테이블스페이스에 대한 할당량이 있어야 합니다. 테이블스페이스 tbs_2, tbs_3 및 tbs_4를 만드는 예제는 탁구 만들기를 참조하십시오. 각 메달은 행의 약 1/3입니다. 그리고 당신은 대략 있을 것 이라고 생각 50/50 남자와 여자 사이 분할. 슬프게도 그것은 더 같은 75/25 여성에 남자. 그러나 어떤 경우에 그것은 단지 성별이나 메달에 대한 인덱스가 유용 할 것 같지는 않습니다. 테이블에는 26 개의 올림픽 게임이 있습니다.

“몇” 행에 가까워지고 있습니다. 그러나 최적화 프로그램이 이 인덱스를 선택할 것이라는 보장은 없습니다. 사용자가 hr.employees에게 오름차순(A ~ Z)과 부서 ID를 내림차순(높음에서 낮음)으로 쿼리하는 경우 데이터베이스는 이 인덱스를 사용하여 데이터를 검색하고 정렬의 추가 단계를 피할 수 있습니다. 이러한 열은 하나 이상의 열에 적용되는 함수가 있는 인덱스입니다. 인덱스는 이 계산의 결과를 저장합니다. 예를 들어 다음 섹션에서는 인덱스가 이러한 명령문에 도움이 되지만 다른 문에는 도움이 되지 않는 이유에 대해 설명합니다. 세 개의 열 모두에 액세스하는 쿼리, last_name 열만 또는 last_name 및 job_id 열만 이 인덱스를 사용합니다. 이 예제에서는 last_name 열에 액세스하지 않는 쿼리는 인덱스를 사용하지 않습니다.

Oracle Database는 인덱스 열을 왼쪽에서 오른쪽으로 읽는것을 기억합니다. 따라서 색인(메달, 이벤트)을 받으면 100m 메달 수상자를 모두 찾는 쿼리가 먼저 메달 값을 읽어야 합니다. 두 인덱스의 rowid 범위를 오버레이하면 두 인덱스의 where 절과 일치하는 행을 찾을 수 있습니다. 그런 다음 해당 행에 대한 테이블로 이동합니다. 응용 프로그램에 기존 인덱스가 필요하지 않다는 것을 증명하기는 어렵습니다. 거의 사용되지 않는 인덱스를 만드는 이유는 시간이 지남에 따라 잊혀지는 경향이 있습니다. 사람들은 와서 팀에 갈 것입니다. 그리고 데이브가 그 다섯 개의 열 기능 기반 괴물을 만든 이유를 아무도 알 수 없습니다. 연말 보고에 사용되지 않거나 중요한 것이 없는지 알 수 없습니다. 오라클 데이터베이스 SQL 언어 참조 기능 기반 인덱스에 대 한 제한 및 사용 참고 하지만 만약 당신의 인덱스 정말 빠른 계획을 사용 했 어? 데이터베이스를 올바른 경로로 강제하거나 장려할 수 있는 방법을 원하십니까? 어디 한번 봅시다.