안녕하세요. IBM Community에서 Informix의 rowid를 참조하는 내용이 있어 공유하고자 합니다.
원래 글의 내용은 Informix page 할당 개수의 한계에 관련된 질문이었는데 파티션된 테이블의 rowid에 대한 내용이 중간에 언급되었습니다.
인포믹스의 파티션된 테이블은 rowid 컬럼이 존재하지 않는데, 파티션 테이블에 rowid를 표시되도록 하려면 아래의 명령으로 숨겨진 ROWID 컬럼을 추가할 수 있습니다.
ALTER TABLE frag1 ADD ROWIDS;
그런데 ifx_row_id라는 숨겨진 컬럼이 있다고 합니다. 이리저리 자료들을 찾아보니 11.50 버전부터 지원되었다고 하는데요. IBM에서 공식적으로 문서화되지 않았습니다.
기존 테이블에 rowid 컬럼을 추가하지 않고도 rowid를 대체하여 사용할 수 있습니다.
보여지는 형식은 <partnum>:<rowid> 입니다.
특징으로는 아래와 같이 SEQUENTIAL SCAN이 발생한다는 점입니다.
QUERY: (OPTIMIZATION TIMESTAMP: 01-02-2020 17:27:54) ------ select ifx_row_id from systables where ifx_row_id='1048900:1301' Estimated Cost: 7 Estimated # of Rows Returned: 1 1) informix.systables: SEQUENTIAL SCAN Filters: informix.systables.ROWID = '1048900:1301'
반면에 ROWID 컬럼은 INDEX SCAN을 합니다.
QUERY: (OPTIMIZATION TIMESTAMP: 01-02-2020 17:51:25) ------ select * from systables where rowid=2058 Estimated Cost: 1 Estimated # of Rows Returned: 1 1) informix.systables: INDEX PATH (1) Index Name: (ROWID) Index Keys: ROWID Lower Index Filter: informix.systables.ROWID = 2058
ifx_row_id 컬럼은 일반적인 사용자 업무에 사용되기보다는 마이그레이션등의 작업에 이용할 수 있는 옵션이 될 수 있을 것 같습니다.
아래 APAR를 보면 WITH ROWIDS 옵션을 쓰기보다 일반 컬럼을 primary key로 사용할 것을 권고하고 있습니다.
IC94738: IFX_ROW_ID UNDOCUMENTED FEATURE IS DOING SEQUENTIAL SCAN INSTEAD OF READING DIRECTLY IN THE APPROPRIATE PAGE
Using the WITH ROWIDS Option Nonfragmented tables contain a hidden column called rowid, but by default, fragmented tables have no rowid column. You can use the WITH ROWIDS keywords to add the rowid column to a fragmented table. Each row is automatically assigned a unique rowid value that remains stable for the life of the row and that the database server can use to find the physical location of the row. Each row requires an additional four bytes to store the rowid. Important: This is a deprecated feature. Use primary keys as an access method rather than the rowid column.
'Informix > informix reference' 카테고리의 다른 글
Index의 페이지 수 제한 증가 (0) | 2020.02.16 |
---|---|
문자열의 특수문자 제거하기 (0) | 2020.01.17 |
Informix 무료 버전 14.10.xC2의 제한 사항 완화 (0) | 2019.11.29 |
인포믹스에서 문자열을 구분자로 나누기 (0) | 2019.08.02 |
How to enable JDBC tracing starting with JDBC version 3.0.x (0) | 2019.05.19 |