두 개의 테이블이 있습니다.
하나의 테이블에는 유일한 값의 PK가 있고, 부수적인 컬럼들이 몇 개 있습니다.
다른 테이블에는 앞의 테이블의 PK와 같은 값으로 유일한 FK가 있고, 몇 개의 컬럼들이 있고, 하나의 컬럼에 단순히 문자열들이 들어갑니다.
table a (
PK,
...,
...,
...,
)
table b (
FK,
...,
...,
...,
data varchar(256)
)
이 때 검색 시 두번째 테이블에서 data를 like 문으로 '%조건%" 검색을 한 FK와 첫 번째 테이블의 PK가 같은 것을 뽑아냅니다.
이 때 어떤 방법이 효율적일까요?
서브쿼리와 join으로 하니 속도가 느립니다. 단순히 쿼리 플랜을 보면 시퀀스 스캔을 하는것 같습니다.
Total runtime: 5852.805 ms 이정도 나옵니다.
두 번째 테이블의 데이타는 230만건정도입니다. 테스트용으로 만든것인데, 그렇게 많은 양이 아닙니다.
많이 늘어날 수 있어서 속도가 더 느릴것 같습니다. 데이타 사용량만 몇십기가가 될 수 있습니다.
이 때 서브쿼리와 join을 할필요가 있나요? 두 테이블이 연결되는 것은 PK와 FK입니다.
단순히 FK만 뽑아서 PK를 검색을 하는것이 나을까요? 이렇게 하면 두 번의 쿼리를 해야합니다.
그리고 문자열 검색 시 빠른 검색을 위한 방법이 있나요? 문자열은 256길이의 varchar입니다.
이 컬럼에 인덱스를 걸어야할까요? 문자열인 컬럼을 인덱스를 걸면, 비효율적인가요?
하지만 검색 시 필요할것도 같구요. 조언부탁드립니다.
그리고 검색해 보니 % 사용 시 인덱스를 걸어도 인덱스를 안탈 수 있다고 나오던데요. 사실인가요?
그렇다면, 인덱스를 써도 효과가 없을것 같은데, 다른 방법이 있나요?
메인 질문과는 거리가 있는 질문인데 데이터를 문자열과 숫자로 저장할 수 있는데, 어떤 데이터가 효율적일까요?
예를 들면 시간 데이터를 문자로 풀어서 저장할 수도 있고, 숫자로 저장할 수도 있는 경우입니다.
질문을 하다보니 질문이 많아진것 같습니다. ^^; |