[Oracle] longest match
- 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라는 판단을 내리는 쿼리가 수행된다면 성능이 많이 안좋아질거라는 의견.
'RDBMS > Query design' 카테고리의 다른 글
인덱스 힌트 관련 - 쿼리 플랜 결과는 무시하고 꼭 써줘야 한다. (0) | 2023.04.25 |
---|---|
MERGE INTO(UPSERT) 에서도 PK violation이 발생할 수 있다. (0) | 2022.02.10 |
[Oracle] Pagination (0) | 2021.05.17 |
일단 다 가져와서 앱에서 필터링? vs 쿼리 WHERE에서 필터링? (0) | 2019.11.28 |
[Transaction] lost update problem (isolation level, deadlock, update lock) (0) | 2019.07.23 |