엄범

 

https://dba.stackexchange.com/questions/42997/longest-prefix-search-in-oracle  

https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:4246230700346756268  

 

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

```sql

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 문의 결과...

다음과 같이 인덱스 걸고

```sql

create index CARD_BIN_idx1 on CARD_BIN ( to_number(BIN_NO) )

```

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

 

> longest match는, 쿼리 자체는 단순하게 가고 어플리케이션에서 loop로 처리해주는 것이 낫다.

> 매번 DB 자체에서 longest match라는 판단을 내리는 쿼리가 수행된다면 성능이 많이 안좋아질거라는 의견.