그렇군요. 일단 group by 에 사용된 것으로 보아 index 를 해주는 것이 자료가 많을 경우 상당한 속도의 이득을 볼 것으로 판단됩니다. 그리고 primary key 에 틀림없이 중복되는 항목이 있을 것으로 생각됩니다. 이것을 확인해 보시려면 다음 query 의 결과 돌아오는 row 의 갯수가 같은지 확인해 보시기 바랍니다.
select distinct mem_id from member;
select mem_id from member;
만약 같다면 mem_id 는 unique 한 것이며, DBMS 자체가 잘못이 있는 것이겠지요.
>>블루 님께서 쓰시길<<
:: CREATE UNIQUE INDEX "member_pkey" on "member" using btree ( "mem_id" "varchar_ops" );를 실행시
:: 키면
:: Cannot create unique index. Table contains non/unique value이란 내용이 나옵니다.
:: 테이블 내용이 잘못되어서 가장먼저 vacuum을 시켜 수정을 해보았지만...
:: tupple의 수가 일치하지 않아서 에러가 발생하더군요...
:: 그래서 중복되는 값들을 모두 삭제하고 다시 해보아도 중복된 Primary 값이 있다고 합니다.
:: 그래서 index를 삭제하고 위의 것을 실행시켰더니....위와 같은 결과가 나옵니다..
:: 그런데 우스운 것은 create view table as select * from member라는 명령어로 view를 만든후 create
:: unique index를 사용하면 index가 생성되는 것입니다.
:: 그리고 이것을 insert into table select * from member를 하면 중복된 unique value땜시 실행이 안된
:: 다는 에러가 나오는 군요....ㅠ.ㅠ
:: 또 select count(*) from member group by mem_id(이칼럼은 primary_key였슴다) having count(*) > 1;
:: 을 실행하니 0row값이 나옵니다...
:: 중복된 값도 없는데...어떻게 해야 할지....
:: 그래서 일단 index값을 삭제한후 dump를 받아서 수정을 본뒤 해보았지만....
:: 중복된 값이 없음에도 불구하고 계속 그런 결과만 나오는군요...어떻게 해야 할지 모르겠네요....
:: index 없이 사용해도 무리가 없다면 문제가 없지만....
:: 그렇지 않을 것같아서.....
:: 일단 index를 제외한 뒤에는 모든 것이 제대로 돌아갑니다.... ㅠ.ㅠ
::
:: 여기나온 질문과 응답은 모두 찾아보구 해보라고 하는 건 다 해보았거든....
:: 근데.....안되더군요....
:: 방법이 없을까요....
:: index 없이 사용해도 괜찮다면 그냥 놔두고 하겠지만...아무래도 불안해서....ㅠ.ㅠ
|