RDBMS/Query design
인덱스 관련 총정리
인덱스 관련 총정리
2023.08.15인덱스 관련 이론 6장. 물리적 데이터베이스 설계 : 인덱스 관련 https://dataonair.or.kr/인덱스 기본 원리 https://d2.naver.com/helloworld/1155 https://docs.oracle.com/cd/E11882_01/server.112/e40540/indexiot.htm#CNCPT721 커버링 인덱스 적용하기 https://jojoldu.tistory.com/476 https://docs.oracle.com/javadb/10.8.3.0/tuning/ctunoptimz30768.html 커버링 인덱스는 SELECT의 모든 컬럼이 인덱스에 들어있어야 적용된다. 허나 그렇지 않다고 하더라도, Data Filter 보다 Key Filter를 적용하는게 성능에 큰 도움이..
인덱스 힌트 관련 - 쿼리 플랜 결과는 무시하고 꼭 써줘야 한다.
인덱스 힌트 관련 - 쿼리 플랜 결과는 무시하고 꼭 써줘야 한다.
2023.04.25이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
MERGE INTO(UPSERT) 에서도 PK violation이 발생할 수 있다.
MERGE INTO(UPSERT) 에서도 PK violation이 발생할 수 있다.
2022.02.10상황 요구사항 1) tbl에 없는 경우 INSERT. 있다면 에러 없이 스킵 처리 요구사항 2) 동시에 여러 스레드에서 쿼리 실행해야 함 ```sql MERGE INTO tbl USING dual ON (pk1 = '1') WHEN NOT MATCHED THEN INSERT (pk1) VALUES ('1') ``` ``` ; SQL []; ORA-00001: 무결성 제약 조건(TBL.IPK_PK1)에 위배됩니다 ; nested exception is java.sql.SQLIntegrityConstraintViolationException: ORA-00001: 무결성 제약 조건(TBL.IPK_PK1)에 위배됩니다 ``` tbl에 없는 경우 INSERT임에도, PK violation이 발생했음. (만약 co..
[Oracle] Pagination
[Oracle] Pagination
2021.05.17Pagination https://en.wikipedia.org/wiki/Select_(SQL)#Result_limits Offset 기반 rownum ROW_NUMBER() Cursor 기반 Cursor-based pagination을 Seek method라고도 부르고 No offset이라고도 부른다. 12c 버전 이후라면? : Row Limiting Clause https://oracle-base.com/articles/12c/row-limiting-clause-for-top-n-queries-12cr1 myjamong.tistory.com/170 12c 이전에는? https://stackoverflow.com/questions/241622/paging-with-oracle https://blogs...
[Oracle] longest match
[Oracle] longest match
2021.02.16https://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..
일단 다 가져와서 앱에서 필터링? vs 쿼리 WHERE에서 필터링?
일단 다 가져와서 앱에서 필터링? vs 쿼리 WHERE에서 필터링?
2019.11.28findAll로 다 가져와서 앱에서 필터링? 아니면 쿼리 WHERE절에서 필터링? 어디서 관리하는게 더 나은가? PagingItemReader 같이 offset 기반으로 분할해서 읽어오는 경우, 일단 다 가져와서 앱에서 필터링하게 되면 update로 인한 offset이 틀어짐이 발생 할 수 있다. 전제 작업 A1 read 대상 항목 : complete=n & type=A 작업 B1 read 대상 항목 : complete=n & type=B 작업 A1, B1에서는 read 대상 항목을 임시 테이블에 적재 작업 A2, B2에서는 임시 테이블에서 대상 가져와 complete=y로 update 작업 {}1, {}2는 다른 Step으로 되어 있음. (Chunk 단위 처리 아님) 같은 Step으로 구성하고 read..
[Transaction] lost update problem (isolation level, deadlock, update lock)
[Transaction] lost update problem (isolation level, deadlock, update lock)
2019.07.23포인트 읽기 - 포인트 차감 순으로 DB 작업이 발생하는 상황이었다. ```java @Transactional public foo bar() { // SELECT MemberRestMileageInfo member = getMemberMileageByKey(memberKey); ... // UPDATE memberInfoMapper.update(member); } ``` 이런 상황에서 같은 `` memberKey`` 를 대상으로 빠르게 두 번 요청하면 갱신 손실 문제가 발생한다. ``` T1 T2 start transaction start transaction SELECT SELECT UPDATE UPDATE ``` 즉, 먼저 들어온 트랜잭션이 UPDATE 하기 전에 다른 트랜잭션이 SELECT를 해버리..