짧은 대답은 : 테이블의 기본 키는 형 BIGINT 될 필요가있다 :이 경우
CREATE TABLE hydr(dt bigint primary key, value double, sensorid int);
는 테이블이 구성되어있는 "DT"열을 사용하여. 이것을 "clustered index"라고합니다. TIMESTAMP 데이터 유형은 주로 나노초도 포함되어 있기 때문에 지원되지 않습니다. 당신이 할 수있는 일은 유닉스 타임 스탬프 (1970 년부터 밀리 세컨드)를 BIGINT로 저장하는 것입니다.
긴 대답 : 데이터가 내부적으로 H2에 저장되는 방법에 대한 문서는 좋지 않습니다. H2 데이터베이스의 "성능"문서에 다음 섹션을 추가하겠습니다. 나는 (말씀 해주십시오하지 않은 경우)이 물건을 정리 바랍니다 : 테이블이 형 BIGINT, INT의 단일 열 기본 키를 사용하여 생성 된 경우
이 데이터는 내부적으로 지속 데이터베이스의 경우
을 저장 되는가 , SMALLINT, TINYINT이면 테이블의 데이터는 이런 식으로 구성됩니다. 이것은 때때로 "클러스터 된 인덱스"또는 "인덱스 구성 테이블"이라고도합니다.
H2는 내부적으로 테이블 데이터와 인덱스를 b- 트리 형식으로 저장합니다. 각 b- 트리는 항목을 고유 키 (하나 이상의 열) 및 데이터 (0 개 이상의 열) 목록으로 저장합니다. 테이블 데이터는 항상 long 유형의 단일 열 키가있는 "데이터 b- 트리"형식으로 구성됩니다. 테이블을 작성할 때 BIGINT, INT, SMALLINT, TINYINT 유형의 단일 컬럼 기본 키가 지정되면,이 컬럼은 데이터 b- 트리의 키로 사용됩니다. 기본 키가 지정되지 않은 경우, 기본 키 열이 다른 데이터 형식 인 경우 또는 기본 키에 둘 이상의 열이있는 경우 숨겨진 BIGINT 자동 증가 열이 테이블에 추가됩니다.이 열은 다음과 같이 사용됩니다. 데이터 b 트리의 키 테이블의 다른 모든 C 럼은이 데이터 b- 트리의 데이터 영역에 저장됩니다 (외부 BLOB, CLOB C 럼 제외).
각 추가 색인에 대해 하나의 새로운 "색인 b- 트리"가 작성됩니다. 이 b- 트리의 키는 색인 된 열과 데이터 b- 트리의 키로 구성됩니다. 데이터가 삽입 된 후 기본 키가 작성되거나 기본 키에 여러 컬럼이 들어 있거나 기본 키가 위에 나열된 데이터 유형이 아닌 경우 기본 키는 새 인덱스 b- 트리에 저장됩니다.
토마스에게 답변 해 주신 것에 감사 드리며,이 점은 H2를 조금 더 잘 이해하는 데 도움이됩니다. 물론 이것은 질문에 대한 대답입니다. – Tim