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

```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라는 판단을 내리는 쿼리가 수행된다면 성능이 많이 안좋아질거라는 의견.

'Data Store' 카테고리의 다른 글

[Oracle] Pagination  (0) 2021.05.17
Flyway  (0) 2021.05.13
[Oracle] longest match  (0) 2021.02.16
DB 이중화 / 클러스터링  (0) 2020.09.23
redis  (0) 2020.03.10
[DB] 성능 최적화  (0) 2019.11.28