JET_INDEXCREATE 구조체
적용 대상: Windows | Windows Server
JET_INDEXCREATE 구조에는 ESE(Extensible Storage Engine) 데이터베이스의 데이터에 대한 인덱스를 만드는 데 필요한 정보가 포함되어 있습니다. 구조체는 JetCreateIndex2와 같은 함수와 JET_TABLECREATE 및 JET_TABLECREATE2 같은 구조체에서 사용됩니다.
typedef struct tagJET_INDEXCREATE {
unsigned long cbStruct;
tchar* szIndexName;
tchar* szKey;
unsigned long cbKey;
JET_GRBIT grbit;
unsigned long ulDensity;
union {
unsigned long lcid;
JET_UNICODEINDEX* pidxunicode;
};
union {
unsigned long cbVarSegMac;
JET_TUPLELIMITS* ptuplelimits;
};
JET_CONDITIONALCOLUMN* rgconditionalcolumn;
unsigned long cConditionalColumn;
JET_ERR err;
unsigned long cbKeyMost;
} JET_INDEXCREATE;
멤버
cbStruct
이 구조체의 크기(바이트)입니다. 이 멤버를 sizeof( JET_INDEXCREATE )로 설정합니다.
szIndexName
만들 인덱스의 이름입니다.
인덱스의 이름은 다음 조건을 충족해야 합니다.
종료 null을 포함하지 않고 JET_cbNameMost 미만이어야 합니다.
다음 문자로 구성되어야 합니다. 0~9, A~Z, a~z 및 "!"를 제외한 다른 모든 문장 부호 (느낌표), ","(쉼표), "["(여는 대괄호) 및 "]"(닫는 대괄호) - 즉, ASCII 문자 0x20, 0x2d 통해 0x22, 0x5a, 0x5c 0x5d 0x7f 통해 0x2f.
공백으로 시작해서는 안됩니다.
하나 이상의 비스페이스 문자로 구성되어야 합니다.
szKey
null로 구분된 토큰의 이중 null로 끝나는 문자열에 대한 포인터입니다.
각 토큰은 "<direction-specifier><column-name>" 형식입니다. 여기서 direction-specification은 "+" 또는 "-"입니다. 예를 들어 "+abc\0-def\0+ghi\0"의 szKey 는 세 개의 열 "abc"(오름차순), "def"(내림차순) 및 "ghi"(오름차순)에 인덱싱됩니다. C 언어에서 문자열 리터럴에는 암시적 NULL 종결자가 있습니다. 따라서 위의 문자열은 double-NULL로 종료됩니다.
szKey에 지정된 열 수가 JET_ccolKeyMost 값(버전 종속 상수)을 초과할 수 없습니다.
szKey에서 하나 이상의 열 이름을 지정해야 합니다.
사용되지 않는 동작: double-NULL 종결자 후에는 인덱스에 대한 LCID를 지정하는 방법으로 언어 ID(MAKELCID( langid, SORT_DEFAULT )에 전달되는 WORD)를 지정할 수 있습니다. szKey의 언어 ID와 JET_UNICODEINDEX LCID를 모두 지정하는 것은 불법입니다(grbit에서 JET_bitIndexUnicode 설정).
사용되지 않음: 언어 ID 후에 cbVarSegMac 을 USHORT로 전달할 수 있습니다. USHORT가 szKey 에서 모두 설정되고 cbVarSegMac 이 구조체에 설정된 경우 동작은 정의되지 않습니다.
cbKey
종료되는 두 null을 포함하여 szKey 의 길이(바이트)입니다.
grbit
다음 표에 나열된 값이 0개 이상 포함된 비트 그룹입니다.
값 |
의미 |
---|---|
JET_bitIndexUnique |
중복 인덱스 항목(키)은 허용되지 않습니다. JetSetColumn이 호출될 때가 아니라 JetUpdate가 호출될 때 적용됩니다. |
JET_bitIndexPrimary |
인덱스는 기본(클러스터형) 인덱스입니다. 모든 테이블에는 정확히 하나의 기본 인덱스가 있어야 합니다. 테이블에 대해 명시적으로 정의된 기본 인덱스가 없는 경우 데이터베이스 엔진은 자체 기본 인덱스만 만듭니다. |
JET_bitIndexDisallowNull |
인덱스를 만드는 열에는 NULL 값이 포함될 수 없습니다. |
JET_bitIndexIgnoreNull |
인덱싱되는 모든 열이 NULL인 경우 행에 대한 인덱스 항목을 추가하지 마세요. |
JET_bitIndexIgnoreAnyNull |
인덱싱되는 열이 NULL인 경우 행에 대한 인덱스 항목을 추가하지 마세요. |
JET_bitIndexIgnoreFirstNull |
인덱싱되는 첫 번째 열이 NULL인 경우 행에 대한 인덱스 항목을 추가하지 마세요. |
JET_bitIndexLazyFlush |
인덱스 작업은 지연 기록됩니다. JET_bitIndexLazyFlush 데이터 업데이트의 지연에 영향을 주지 않습니다. 프로세스 종료로 인덱싱 작업이 중단된 경우에도 Soft Recovery는 데이터베이스를 일관된 상태로 가져올 수 있지만 인덱스가 없을 수 있습니다. |
JET_bitIndexEmpty |
모든 항목이 NULL로 평가되므로 인덱스 빌드를 시도하지 마세요. 또한 grbit 는 JET_bitIndexEmpty 전달될 때 JET_bitIgnoreAnyNull 지정해야 합니다. 이는 성능 향상입니다. 예를 들어 테이블에 새 열이 추가되면 새로 추가된 열 위에 인덱스가 만들어지고 테이블의 모든 레코드가 인덱스로 추가되지 않더라도 검색됩니다. JET_bitIndexEmpty 지정하면 테이블 검사가 건너뜁니다. 이 경우 시간이 오래 걸릴 수 있습니다. |
JET_bitIndexUnversioned |
인덱스 생성이 다른 트랜잭션에 표시되도록 합니다. 일반적으로 트랜잭션의 세션은 다른 세션에서 인덱스 만들기 작업을 볼 수 없습니다. 이 플래그는 다른 트랜잭션이 동일한 인덱스 생성 가능성이 있는 경우에 유용할 수 있습니다. 두 번째 인덱스 만들기는 잠재적으로 많은 불필요한 데이터베이스 작업을 유발하는 대신 실패합니다. 두 번째 트랜잭션이 인덱스 즉시 사용하지 못할 수 있습니다. 인덱스 만들기 작업은 사용 가능하기 전에 완료해야 합니다. 버전 정보가 없는 인덱스 만들기를 위해 세션이 현재 트랜잭션에 있지 않아야 합니다. |
JET_bitIndexSortNullsHigh |
이 플래그를 지정하면 인덱스의 모든 열에 대한 데이터 다음에 NULL 값이 정렬됩니다. |
JET_bitIndexUnicode |
이 플래그를 지정하면 구조체의 lcid/pidxunicde 공용 구조체 필드 해석에 영향을 줍니다. 비트를 설정하면 pidxunicode 필드가 실제로 JET_UNICODEINDEX 구조를 가리킵니다. 유니코드 데이터를 인덱싱하기 위해 JET_bitIndexUnicode 필요하지 않습니다. 유니코드 데이터의 정규화를 사용자 지정하는 데만 사용됩니다. |
JET_bitIndexTuples |
인덱스가 튜플 인덱스임을 지정합니다. 튜플 인덱스의 설명은 JET_TUPLELIMITS 참조하세요. JET_bitIndexTuples Windows XP 운영 체제에 도입되었습니다. |
JET_bitIndexTupleLimits |
이 플래그를 지정하면 구조체의 cbVarSegMac/ptuplelimits 공용 구조체 필드 해석에 영향을 줍니다. 이 비트를 설정하면 ptuplelimits 필드가 실제로 사용자 지정 튜플 인덱스 제한을 허용하도록 JET_TUPLELIMITS 구조를 가리킵니다(JET_bitIndexTuples 의미). JET_bitIndexTupleLimits Windows Server 2003 운영 체제에 도입되었습니다. |
JET_bitIndexCrossProduct 0x00004000 |
다중값 열인 둘 이상의 키 열이 있는 인덱스에 대해 이 플래그를 지정하면 해당 키 열에 있는 모든 값의 교차곱 결과에 대한 인덱스 항목이 생성됩니다. 그렇지 않으면 인덱스에는 다중값 열인 가장 중요한 키 열의 각 다중값에 대한 항목이 하나만 있으며, 이러한 각 인덱스 항목은 다중값 열인 다른 모든 키 열의 첫 번째 다중값을 사용합니다. 예를 들어 값이 "빨강"과 "파란색"이고 값이 "1" 및 "2"인 B 열 위에 있는 A 열에 대해 이 플래그를 지정한 경우 다음 인덱스 항목이 생성됩니다. "red", "1"; "red", "2"; "blue", "1"; "blue", "2". 그렇지 않으면 다음 인덱스 항목이 생성됩니다. "red", "1"; "blue", "1". JET_bitIndexCrossProduct Windows Vista 운영 체제에 도입되었습니다. |
JET_bitIndexKeyMost 0x00008000 |
이 플래그를 지정하면 인덱스가 구조체의 cbKeyMost 필드에 지정된 최대 키 크기를 사용합니다. 그렇지 않으면 인덱스가 JET_cbKeyMost(255)를 최대 키 크기로 사용합니다. JET_bitIndexKeyMost Windows Vista에서 도입되었습니다. |
JET_bitIndexDisallowTruncation 0x00010000 |
이 플래그를 지정하면 인덱스가 업데이트되어 잘린 키가 JET_errKeyTruncated 실패하게 됩니다. 그렇지 않으면 키가 자동으로 잘립니다. 키 잘림에 대한 자세한 내용은 JetMakeKey 함수를 참조하세요. Windows Vista: JET_bitIndexDisallowTruncation Windows Vista에 도입되었습니다. |
JET_bitIndexNestedTable 0x00020000 |
이 플래그를 지정하면 여러 다중값 열에 대한 인덱스가 업데이트되지만 동일한 itagSequence 값으로만 업데이트됩니다. JET_bitIndexNestedTable Windows Vista에서 도입되었습니다. |
ulDensity
초기 인덱스 B+ 트리의 백분율 밀도입니다. 100보다 작은 숫자를 지정하면 처음에 인덱스를 만드는 데 더 많은 공간이 사용되지만 인덱스의 향후 증가를 허용하여 내부 조각화를 방지할 수 있습니다.
lcid
grbit 매개 변수에 JET_bitIndexUnicode 값을 지정하지 않은 경우 데이터를 정규화할 때 사용할 LCID(로캘 식별자)입니다. 인덱스가 유니코드 열 위에 있는 경우 LCID는 정규화에 영향을 줍니다.
pidxunicode
grbit 매개 변수에 JET_bitIndexUnicode 값이 지정된 경우 JET_UNICODEINDEX 구조체에 대한 포인터입니다. 이렇게 하면 사용자가 유니코드 정규화 중에 LCMapString 함수에 전달되는 사용자 지정 플래그를 지정할 수 있습니다.
cbVarSegMac
JET_bitIndexTupleLimits 값이 grbit 매개 변수에 지정되지 않은 경우 인덱스에서 저장할 각 열의 최대 길이(바이트)입니다.
이 필드에 0 값을 지정하는 것은 다음과 같습니다.
기본 인덱스 JET_cbPrimaryKeyMost 지정합니다.
보조 인덱스 JET_cbSecondaryKeyMost 지정합니다.
ptuplelimits
grbit 매개 변수에 JET_bitIndexTupleLimits 값이 지정된 경우 JET_TUPLELIMITS 구조체에 대한 포인터입니다.
ptuplelimits는 Windows Server 2003에서 도입되었습니다.
rgconditionalcolumn
인덱스에서 조건부 열을 지정하는 데 사용되는 JET_CONDITIONALCOLUMN 구조체 배열에 대한 선택적 매개 변수입니다.
cConditionalColumn
rgconditionalcolumn 배열의 구조체 수입니다.
err
이 인덱스를 만들기 위한 반환 코드를 포함합니다.
cbKeyMost
인덱스의 키에 대해 허용되는 최대 크기(바이트)를 지정합니다. grbit 매개 변수에 JET_bitIndexKeyMost 값을 지정하지 않으면 이 매개 변수는 무시됩니다. 이 매개 변수가 0으로 설정되고 grbit 매개 변수에 JET_bitIndexKeyMost 지정되면 호출 함수는 JET_err_InvalidDef 함께 실패합니다.
지원되는 최소 최대 키 크기는 레거시 최대 키 크기인 JET_cbKeyMostMin(255)입니다.
최대 키 크기는 다음과 같이 데이터베이스 페이지 크기(JET_paramDatabasePageSize)에 따라 달라집니다.
JET_paramDatabasePageSize = 2048인 경우 JET_cbKeyMostMin (255) <= cbKeyMost<= JET_cbKeyMost2KBytePage(500)
JET_paramDatabasePageSize = 4096인 경우 JET_cbKeyMostMin (255) <= cbKeyMost<= JET_cbKeyMost4KBytePage(1000)
JET_paramDatabasePageSize = 8192인 경우 JET_cbKeyMostMin (255) <= cbKeyMost<= JET_cbKeyMost8KBytePage(2000)
instance 지원되는 최대 키 크기는 JET_paramKeyMost 시스템 매개 변수에서도 읽을 수 있습니다.
cbKeyMost 는 Windows Vista에서 도입되었습니다.
설명
ESE는 여러 값을 포함하는 키 열에 대한 인덱싱을 지원합니다. 이 기능을 사용하려면 열이 태그가 지정된 열 형식(JET_bitColumnTagged)이어야 하며 여러 값이 JET_bitColumnMultiValued 인덱싱되도록 플래그가 지정되어야 합니다. Windows Vista 이전 버전의 Windows에서는 인덱스의 첫 번째 다중값 키 열만 인덱스에서 해당 값이 확장됩니다. 다른 모든 다중값 및 태그가 지정된 열은 인덱스에서 첫 번째 값만 확장합니다.
다음 행이 테이블에 있다고 가정하고(열 알파는 다중값이 아닌 반면 열 베타, 감마 및 델타는 다중값임) 인덱스는 "+Alpha\0+Beta\0+Gamma\0+Delta\0\0"으로 만들어집니다.
알파 |
베타 |
감마 |
델타 |
---|---|---|---|
1 |
ABC |
MNO |
VWX |
2 |
Tthe |
비 |
IN |
떨어지는 인덱스 튜플은 다음과 같이 저장됩니다.
{1,ABC,MNO,VWX}
{1,GHI,MNO,VWX}
{1,JKL,MNO,VWX}
{2,THE,RAIN,IN}
두 번째 행의 알파 열에 단일 다중값이 있는 경우에도 {2,THE,SPAIN,IN}은 저장되지 않습니다.
Windows Vista부터 시작하는 Windows 버전에서는 JET_bitIndexCrossProduct 지정하여 인덱스에서 모든 다중값 열을 확장할 수 있습니다.
요구 사항
요구 사항 | 값 |
---|---|
클라이언트 |
Windows Vista, Windows XP 또는 Windows 2000 Professional이 필요합니다. |
서버 |
Windows Server 2008, Windows Server 2003 또는 Windows 2000 Server가 필요합니다. |
머리글 |
Esent.h에 선언되었습니다. |
유니코드 |
JET_ INDEXCREATE_W(유니코드) 및 ANSI(JET_ INDEXCREATE_A)로 구현됩니다. |
추가 정보
JET_COLTYP
JET_CONDITIONALCOLUMN
JET_ERR
JET_GRBIT
JET_TABLECREATE
JET_TABLECREATE2
JET_TUPLELIMITS
JET_UNICODEINDEX
JetCreateIndex2
JetSetColumn
JetUpdate