enterprisedb@[local]:5445:edb]
SQL> \l+
Name | Owner | Encoding | Collate | Ctype |
-----------+--------------+----------+------------+------------+
test01 | enterprisedb | UTF8 | ko_KR.utf8 | ko_KR.utf8 |
test02 | enterprisedb | UTF8 | en_US.utf8 | en_US.utf8 |
test03 | enterprisedb | UTF8 | C | C |
(7 rows)
enterprisedb@[local]:5445:edb]
SQL>
--------------------------- test.sql --------------------------------------
drop table if exists korean;
create table korean ( indx int, word varchar(30));
insert into korean values ( 1, '사과');
insert into korean values ( 2, '배');
insert into korean values ( 3, '자두');
insert into korean values ( 4, '망고');
insert into korean values ( 5, '파인애플');
insert into korean values ( 6, '포도');
insert into korean values ( 7, '딸기');
insert into korean values ( 8,'강아지');
insert into korean values ( 8, '관리자');
select * from korean order by word;
insert into korean select x.* from korean x, generate_series(1,100) y where indx not in (4);
vacuum analyze verbose korean;
select * from korean order by word;
select count(*) from korean;
select * from korean where word like '망%';
select * from korean where word like '%망%';
select * from korean where word like '%똠%';
create index indxx on korean(word);
explain (analyze, buffers) select * from korean;
explain (analyze, buffers) select * from korean where word like '망%'; ----- !!!
explain (analyze, buffers) select * from korean where word='망고';
------------------------------------------------------------------------------------------------
각 test01/ test02 / test03 에 대해 위 sql 을 테스트해봤습니다.
*한글 정렬 => test01 와 test03 정상 / test02 는 한글 정렬 안됨
* like 검색시 인덱스를 잘 타는지 => test03 만 정상 / test01 과 test02 는 무조건 full scan
즉 select * from korean where word like '망%'; 이 쿼리결과에 대해서 test01 와 test02 는 풀스캔인데요. 단 인덱스 생성시 create index indxx2 on korean(word collate "C"); 이렇게 하면 인덱스를 타긴합니다.
직접 테스트해보세요
정리하면
test03 (UTF8, C) 처럼 디비를 생성하는게 한글정렬도 잘되고, 인덱스 생성시에 collate 따로 지정하지 않아도 되고 가장 무난합니다.