JetIntersectIndexes 함수
적용 대상: Windows | Windows Server
JetIntersectIndexes 함수
JetIntersectIndexes 함수는 동일한 테이블에 있는 여러 보조 인덱스의 여러 인덱스 항목 집합 간의 교차를 계산합니다. 이 작업은 인덱스 범위를 사용하여 표현할 수 있는 두 개 이상의 조건과 일치하는 테이블에서 레코드 집합을 찾는 데 유용합니다.
JET_ERR JET_API JetIntersectIndexes(
__in JET_SESID sesid,
__in JET_INDEXRANGE* rgindexrange,
__in unsigned long cindexrange,
__in_out JET_RECORDLIST* precordlist,
__in JET_GRBIT grbit
);
매개 변수
sesid
이 호출에 사용할 세션입니다.
rgindexrange
JET_IndexRange 구조체의 배열에 대한 포인터입니다. 각 구조체에는 교차할 인덱스 범위 중 하나를 포함하도록 설정된 JET_TABLEID 포함됩니다. 자세한 내용은 JET_IndexRange.
cindexrange
rgindexrange 매개 변수에 포함된 배열의 JET_IndexRange 구조체 수입니다.
precordlist
JET_RECORDLIST 구조체에 대한 포인터입니다. 이 구조체는 JetIntersectIndexes의 결과로 임시 테이블을 트래버스하기에 충분한 정보로 채워집니다.
JET_RECORDLIST 구조를 수신하는 출력 버퍼입니다. 구조체에는 교차의 결과 집합에 대한 설명이 포함되어 있습니다.
grbit
다음에 사용하도록 예약됩니다.
반환 값
이 함수는 다음 반환 코드 중 하나를 사용하여 JET_ERR 데이터 형식을 반환합니다. ESE 오류에 대한 자세한 내용은 확장 가능한 스토리지 엔진 오류 및 오류 처리 매개 변수를 참조하세요.
반환 코드 |
설명 |
---|---|
JET_errSuccess |
작업이 성공적으로 완료되었습니다. |
JET_errClientRequestToStopJetService |
JetStopService 호출로 인해 세션과 연결된 instance 모든 작업이 중단되었으므로 작업을 완료할 수 없습니다. |
JET_errInstanceUnavailable |
세션과 연결된 instance 해당 데이터의 무결성을 보호하기 위해 모든 데이터에 대한 액세스를 해지해야 하는 심각한 오류가 발생하여 작업을 완료할 수 없습니다. Windows XP: 이 반환 값은 Windows XP에 도입되었습니다. |
JET_errInvalidgrbit |
요청된 옵션 중 하나가 잘못되었거나, 잘못 사용되었거나, 구현되지 않았습니다. 이 오류는 다음과 같은 경우 JetIntersectIndexes에서 반환됩니다 . rgindexrange 배열의 요소가 가리키는 JET_IndexRange 구조체에 포함된 grbit은 JET_bitRecordInIndex 같지 않습니다. |
JET_errInvalidParameter |
제공된 매개 변수 중 하나에 예기치 않은 값 또는 다른 매개 변수의 값과 결합될 때 일치하지 않는 값이 포함됩니다. 이 오류는 다음과 같은 이유로 JetIntersectIndexes 에서 반환됩니다.
|
JET_errInvalidSesid |
세션 핸들이 잘못되었거나 닫힌 세션을 참조합니다. 이 오류는 모든 상황에서 반환되지 않습니다. 핸들은 최상의 노력으로만 유효성이 검사됩니다. |
JET_errNotInitialized |
세션과 연결된 instance 초기화되지 않았기 때문에 작업을 완료할 수 없습니다. |
JET_errOutOfCursors |
엔진에서 새 커서를 여는 데 필요한 리소스를 할당할 수 없어 작업이 실패했습니다. 커서 리소스는 paramid 매개 변수에 지정된 JET_paramMaxCursors사용하여 JetSetSystemParameter를 호출하여 구성됩니다. |
JET_errOutOfMemory |
완료할 메모리가 부족하여 작업이 실패했습니다. 호스트 프로세스의 주소 공간이 너무 조각화되면 JetIntersectIndexes는 JET_errOutOfMemory 반환할 수 있습니다. 임시 테이블 관리자는 저장할 데이터의 양에 관계없이 생성된 모든 임시 테이블에 대해 항상 1MB의 주소 공간 청크를 할당합니다. JetIntersectIndexes는 rgindexrange 매개 변수에 지정된 각 JET_IndexRange 대해 하나의 임시 테이블을 만들고 JET_RECORDLIST 출력에 대해 하나의 임시 테이블을 만듭니다. |
JET_errRestoreInProgress |
세션과 연결된 instance 복원 작업이 진행 중이므로 작업을 완료할 수 없습니다. |
JET_errSessionSharingViolation |
둘 이상의 스레드에서 동시에 동일한 세션을 사용하는 것은 불법입니다. Windows XP: 이 반환 값은 Windows XP에 도입되었습니다. |
JET_errTermInProgress |
세션과 연결된 instance 종료 중이므로 작업을 완료할 수 없습니다. |
JET_errTooManyOpenIndexes |
엔진이 테이블의 인덱스를 캐시하는 데 필요한 리소스를 할당할 수 없어 작업이 실패했습니다. 스키마를 캐시할 수 있는 인덱스의 수는 paramid 매개 변수에 지정된 JET_paramMaxOpenTablesJetSetSystemParameter를 사용하여 구성됩니다. |
JET_errTooManyOpenTables |
엔진이 테이블의 스키마를 캐시하는 데 필요한 리소스를 할당할 수 없어 작업이 실패했습니다. 스키마를 캐시할 수 있는 테이블 수는 paramid 매개 변수에 지정된 JET_paramMaxOpenTablesJetSetSystemParameter를 사용하여 구성됩니다. |
JET_errTooManySorts |
엔진이 임시 테이블을 만드는 데 필요한 리소스를 할당할 수 없어 작업이 실패했습니다. 임시 테이블 리소스는 paramid 매개 변수에 지정된 JET_paramMaxTemporaryTables JetSetSystemParameter를 사용하여 구성됩니다. |
성공하면 각 입력 인덱스 범위 설명이 나타내는 조건과 일치하는 레코드의 책갈피를 포함하는 새 임시 테이블이 반환됩니다.
실패 시 결과가 포함된 임시 테이블은 만들어지지 않습니다. 임시 데이터베이스의 상태가 변경될 수 있습니다. 데이터베이스 엔진에서 사용 중인 일반 데이터베이스의 상태는 변경되지 않습니다. 이 함수에 제공된 JET_TABLEID현재 위치가 변경될 수 있습니다.
설명
이러한 조건을 해당 테이블에 대한 보조 인덱스 측면에서 표현할 수 있는 경우 JetIntersectIndexes를 사용하여 테이블의 레코드를 여러 조건으로 효율적으로 필터링할 수 있습니다. 예를 들어 사용자를 포함하는 매우 큰 테이블이 있다고 생각해 보세요. 테이블에는 사용자 ID, 이름, 성 등에 대한 열이 있을 수 있습니다. 이러한 각 열이 별도로 인덱싱되고 테이블의 기본 인덱스가 사용자 ID를 초과한다고 가정합니다. 이름이 A로 시작하고 성이 G로 시작하는 모든 사용자를 찾으려면 다음 단계를 수행합니다.
테이블에서 새 커서를 열고 "이름" 열에서 인덱스를 사용하도록 해당 커서를 설정합니다. 그런 다음 "이름"이 'A'로 시작된 모든 사용자에 대해 인덱스 범위를 설정하여 이 커서가 포함된 JET_IndexRange 구조체를 빌드합니다.
"성"이 'G'로 시작된 모든 사람의 "성" 인덱스에 새 커서를 사용하여 1단계를 반복합니다.
이러한 조건을 JetIntersectIndexes 에 전달하여 결과를 임시 테이블로 계산합니다.
임시 테이블을 트래버스하고 책갈피로 조건을 전달하는 각 레코드를 검색합니다.
결과 집합을 포함하는 임시 테이블은 교차를 계산하는 데 사용되는 모든 조건을 통과한 각 레코드의 책갈피를 포함하는 하나의 열이 있는 간단한 테이블입니다. 결과 집합은 기본 인덱스와 동일한 순서로 정렬되며 중복 항목이 없습니다. 애플리케이션은 임시 테이블의 행을 열거하고 JetRetrieveColumn을 사용하여 각 결과에 대한 책갈피를 검색한 다음 주 인덱스에 배치된 커서에서 해당 책 갈피가 있는 JetGotoBookmark 를 호출하여 데이터베이스의 레코드를 방문하여 교차 결과를 열거할 수 있습니다.
JetIntersectIndexes에서 반환된 임시 테이블은 정방향으로만 검사할 수 있습니다. 또한 검사가 완료되면 JetCloseTable 을 통해 닫아야 합니다. 임시 테이블 및 작동 방식에 대한 자세한 내용은 JetOpenTemporaryTable을 참조하세요.
JetIntersectIndexes 는 일반적으로 여러 인덱싱된 조건에 따라 레코드를 필터링하는 효율적이고 편리한 방법입니다. 그러나 이 기능의 유용성을 최대화하기 위해 따라야 할 몇 가지 중요한 팁이 있습니다. 조건 중 하나가 너무 제한적이어서 결과 인덱스 범위에 레코드가 거의 없다는 것을 알고 있는 경우 단순히 해당 인덱스 범위를 탐색하고 애플리케이션 수준에서 레코드를 필터링하는 것이 좋습니다. 또한 교집합의 다른 기준보다 훨씬 덜 제한적인 기준이 있다는 것을 알고 있는 경우 교차점에서 훨씬 덜 제한적인 조건을 삭제하는 것이 좋습니다. 마지막으로, 기준 중 하나가 전혀 제한적이지 않아 결과 인덱스 범위가 주 인덱스만큼 크다는 것을 알고 있는 경우 해당 인덱스 범위와 교차하면 결과 집합의 크기를 줄이면 도움이 될 가능성이 거의 없습니다. 모든 경우에 입력에서 가능한 인덱스 항목이 가장 적고 최대 성능을 위해 출력에서 가장 구체적인 책갈피 집합을 생성하는 방식으로 조건을 선택해야 합니다.
요구 사항
요구 사항 | 값 |
---|---|
클라이언트 |
Windows Vista, Windows XP 또는 Windows 2000 Professional이 필요합니다. |
서버 |
Windows Server 2008, Windows Server 2003 또는 Windows 2000 Server가 필요합니다. |
머리글 |
Esent.h에서 선언되었습니다. |
라이브러리 |
ESENT.lib를 사용합니다. |
DLL |
ESENT.dll 필요합니다. |
참고 항목
JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JET_IndexRange
JET_RECORDLIST
JetGotoBookmark
JetRetrieveColumn
JetSetIndexRange