IN 연산자를 사용할 경우 비교 대상이 두개의 필드로 고정 되기 때문에 속도 개선이 온 것입니다. 마찬가지로 두개의 필드만으로 unique 필드를 만들 수 있다면 두개의 필드를 primary key 로 지정하시기 바랍니다.
create table table_name (a int, b text,
primary key (a,b));
이런식으로 선언을 하시면 됩니다. 자세한 것은 메뉴얼을 참조하시기 바랍니다.
>>가우 님께서 쓰시길<<
:: 그렇군요.
:: 두개의 필드를 조합하면 unique해지는데 두세개의 필드를 어떻게 primary key로 잡는지요.
:: 아래에서 day와 swid를 키로 잡는다면 구문을 좀..
::
:: hc=> \d day_filecheck
:: day date, // 이것과
:: swid text, // 이것이
:: ftype char(1),
:: fsize int4,
:: ....
::
:: select * into temp tmp_0 * from tmptst_ck where (day,swid) not in (select day,swid from day_file
:: check);
::
:: 위와 같이만해도 조금은 빨라지네요
::
::
:: >>정재익 님께서 쓰시길<<
::
:: :: query 문 자체가 시간이 걸릴수 밖에 없는 문장입니다. 꼭 그런 식으로 query 를 사용해야 하는지
:: 요.
:: :: 가장 좋은 방법은 여러 필드를 조합해서라도 primary key 를 만들어 주는 것입니다. 그렇게 할 경
:: 우,
:: :: 만약 2/3개의 필드를 조합해서라도 primary key 를 선언할 수 있다면, Query 문이 index 를 타게
:: 되므
:: :: 로 훨씬 빨라질 것으로 생각됩니다. Query 문이 가장 느려지는 주된 원인은 except 구문입니다. 저
:: 구
:: :: 문을 사용하지 않을 방법을 강구하는 수 밖에 없습니다.
:: ::
:: :: >>가우 님께서 쓰시길<<
:: ::
:: :: :: / insert into day_filecheck select * from tmp_fchk
:: :: :: except select * from day_filecheck;
:: :: ::
:: :: :: 배치로 들어온데이타를 tmp_fchk라는 임시태이블에 넣어두고 day_filecheck태이블에 insert하려
:: 는
:: :: 데
:: :: :: 시간이 너무걸려서요, 좋은방법이 없을까요.
:: :: :: 배치파일이 잘못동작하거나 실수로 두번입력을 했을때 데이타가 중복되지 않게 하려고 합니다.
:: :: ::
:: :: :: 참고로 위태이블에는 unique한 필드는 없구요.
:: :: ::
|