Create INDEX INDEX 는 데이타베이스내의 relation(테이블)에 대한 검색의 성능을 높여준다. CREATE [UNIQUE] INDEX index_name ON table_name (name_of_attribute); CREATE [UNIQUE] INDEX index_name ON table_name [USING acc_name] (column [ops_name] [,...]); CREATE [UNIQUE] INDEX index_name ON table_name [USING acc_name] (func_name() ops_name ); acc_name : ACCESS METHOD . 디폴트는 BTREE 이다.(BTREE,RTREE,HASH) func_name : 사용자 정의 함수. ops_name : operator class (int4_ops,int24_ops,int42_ops) btree(sid int4_ops) 는 btree 를 이용한 INDEX 자료형이 4-BYTE 정수임. 디폴트 operator class 는 Field Type 이다. 현재 btree 는 7개까지의 Multi-Column INDEX를 지원한다. example 1) INDEX 생성 1 CREATE INDEX indx1 ON supplier(sid); supplier relation(테이블) 의 sname attribute(column) 을 INDEX 로 지정 example 2) INDEX 생성 2 CREATE INDEX indx2 ON supplier USING btree(sid int4_pos); example 3) INDEX 생성 3 CREATE INDEX indx3 ON supplier USING btree(sid int8_ops); example 4) INDEX 생성 4 CREATE INDEX indx4 ON supplier USING btree(sid, tid); example 5) INDEX 삭제 DROP INDEX indx1; DROP INDEX indx2; DROP INDEX indx3; DROP INDEX indx4; Create SEQUENCE SEQUENCE 는 순차적인 숫자 발생기이다. CREATE SEQUENCE seq_name [INCREMENT increment] [MINVALUE minvalue] [MANVALUE maxvalue] [START start] [CACHE cache] [CYCLE] INCREMENT : 이값이 -1 이면 -1 만큼 감소 , 3 이면 3씩 증가, 디폴트는 1 이다. MAXVALUE : optional clause , 증가할수 있는 최고값을 명시적으로 지정 START : 시작값 CACHE : sequence 값을 먼저 메모리에 할당하여 빠른 ACCESS 를 가능케 한다. CYCLE : 최고값으로 증가되면 다시 최소값으로 순환하게 한다. example ) CREATE SEQUENCE seq_name1 START 101; SELECT NEXTVAL('seq_name1); nextval ------- 114 Create FUNCTION FUNCTION 은 새로운 함수를 정의한다. CREATE FUNCTION func_name([type[,...]]) RETURNS return_type [with (attribute [,...])] AS ' definition ' LANGUAGE 'language_name'; LANGUAGE : sql, pgsql, c 등이 있다. example ) CREATE FUNCTION test() RETURNS int4 AS ' SELECT 1 ' LANGUAGE 'sql'; SELECT test() AS answer; answer ------ 1 AS ' 와 ' 사이에 함수의 본문을 기입하면 된다. 참고로 문자열일 경우, 'seq_test1' 와 같은 경우 다음처럼 한다. CREATE FUNCTION test() RETURNS int4 AS ' SELECT NEXTVAL(''seq_test1'') ' LANGUAGE 'sql'; 여기서 NEXTVAL 은 SEQUENCE 관련 내장함수이다.
다음 예제의 이름은 test.sql 입니다.
다음처럼 실행하시면 됩니다.
nogadax=> \i /usr/local/src/test.sql
--code By nogadax@chollian.net /2000/02/18 --drop all object for safe_test DROP SEQUENCE seq_test1; DROP SEQUENCE seq_test2; DROP SEQUENCE seq_test3; DROP INDEX ind_test1; DROP INDEX ind_test2; DROP INDEX ind_test3; DROP TABLE tab_test1; DROP TABLE tab_test2; DROP TABLE tab_test3; DROP FUNCTION func_test(); --create sequence seq_test1,seq_test2,seq_test3 CREATE SEQUENCE seq_test1 START 101; CREATE SEQUENCE seq_test2 START 1; CREATE SEQUENCE seq_test3 START 1; --create table tab_test1,tab_test2,tab_test3 CREATE TABLE tab_test1( tab1_id int4 NOT NULL, tab1_name text, tab1_tel text, teb1_memo text ); CREATE TABLE tab_test2( tab2_id int4 NOT NULL, tab2_name text, tab2_tel text, teb2_memo text ); CREATE TABLE tab_test3( tab3_id int4 DEFAULT nextval('seq_test3') NOT NULL, tab3_name text, tab3_tel text, tab3_memo text ); --craete index CREATE UNIQUE INDEX ind_test1 ON tab_test1(tab1_id); CREATE UNIQUE INDEX ind_test2 ON tab_test2(tab2_id); CREATE UNIQUE INDEX ind_test3 ON tab_test3 USING btree(tab3_id int4_ops); --FUNCTION func_test() CREATE FUNCTION func_test() RETURNS INT4 AS ' SELECT NEXTVAL(''seq_test1'') ' LANGUAGE 'sql'; --transaction 1 BEGIN; INSERT INTO tab_test1 VALUES (func_test(),'jini1','000-0000','No_Memo1'); INSERT INTO tab_test2 VALUES (nextval('seq_test2'),'winob1','000-0001','No_Memo1'); INSERT INTO tab_test3 (tab3_name,tab3_tel,tab3_memo) VALUES ('nogadax1','000-0003','No_Memo1'); INSERT INTO tab_test1 VALUES (func_test(),'jini2','100-0000','No_Memo2'); INSERT INTO tab_test2 VALUES (nextval('seq_test2'),'winob2','100-0001','No_Memo2'); INSERT INTO tab_test3 (tab3_name,tab3_tel,tab3_memo) VALUES ('nogadax2','100-0003','No_Memo2'); INSERT INTO tab_test1 VALUES (func_test(),'jini3','200-0000','No_Memo3'); INSERT INTO tab_test2 VALUES (nextval('seq_test2'),'winob3','200-0001','No_Memo3'); INSERT INTO tab_test3 (tab3_name,tab3_tel,tab3_memo) VALUES ('nogadax3','200-0003','No_Memo3'); INSERT INTO tab_test1 VALUES (func_test(),'jini4','300-0000','No_Memo4'); INSERT INTO tab_test2 VALUES (nextval('seq_test2'),'winob4','300-0001','No_Memo4'); INSERT INTO tab_test3 (tab3_name,tab3_tel,tab3_memo) VALUES ('nogadax4','300-0003','No_Memo4'); INSERT INTO tab_test1 VALUES (func_test(),'jini5','400-0000','No_Memo5'); INSERT INTO tab_test2 VALUES (nextval('seq_test2'),'winob5','400-0001','No_Memo5'); INSERT INTO tab_test3 (tab3_name,tab3_tel,tab3_memo) VALUES ('nogadax5','400-0003','No_Memo5'); END; --transaction 2 BEGIN; SELECT * FROM tab_test1; SELECT * FROM tab_test2; SELECT * FROM tab_test3; VACUUM VERBOSE ANALYZE tab_test1; VACUUM VERBOSE ANALYZE tab_test2; VACUUM VERBOSE ANALYZE tab_test3; END;