JET_INDEXCREATE 구조체

적용 대상: Windows | Windows Server

JET_INDEXCREATE 구조에는 ESE(Extensible Storage Engine) 데이터베이스의 데이터에 대한 인덱스를 만드는 데 필요한 정보가 포함되어 있습니다. 구조체는 JetCreateIndex2와 같은 함수와 JET_TABLECREATEJET_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
GHI
JKL

MNO
PQR
스튜

VWX
Yz

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