Post

(Oracle) longest match

일단… 쿼리 하나로 해결하자면 이렇게도 가능은 한데, 성능 관점에서는?

1
2
3
4
SELECT MIN(t.BIN\_NO) KEEP (DENSE\_RANK FIRST ORDER BY LENGTH(t.BIN\_NO) DESC)
   FROM CARD\_BIN t
   WHERE '654103' LIKE t.BIN\_NO || '%';

DBA 문의 결과…

다음과 같이 인덱스 걸고

1
2
create index CARD\_BIN\_idx1 on CARD\_BIN ( to\_number(BIN\_NO) )

application 단에서 입력값 길이 만큼 loop 돌면서 [제일 긴거, 길이-1, 길이-2, …] 로 쿼리를 n번 날리는게 성능 관점에서는 최고일거라고 함.

longest match는, 쿼리 자체는 단순하게 가고 어플리케이션에서 loop로 처리해주는 것이 낫다. 매번 DB 자체에서 longest match라는 판단을 내리는 쿼리가 수행된다면 성능이 많이 안좋아질거라는 의견.

This post is licensed under CC BY 4.0 by the author.