[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라는 판단을 내리는 쿼리가 수행된다면 성능이 많이 안좋아질거라는 의견.
'Data Store > Query design' 카테고리의 다른 글
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 |
댓글
이 글 공유하기
다른 글
-
MERGE INTO(UPSERT) 에서도 PK violation이 발생할 수 있다.
MERGE INTO(UPSERT) 에서도 PK violation이 발생할 수 있다.
2022.02.10 -
[Oracle] Pagination
[Oracle] Pagination
2021.05.17 -
일단 다 가져와서 앱에서 필터링? vs 쿼리 WHERE에서 필터링?
일단 다 가져와서 앱에서 필터링? vs 쿼리 WHERE에서 필터링?
2019.11.28 -
[Transaction] lost update problem (isolation level, deadlock, update lock)
[Transaction] lost update problem (isolation level, deadlock, update lock)
2019.07.23