DB

DB

[DB] Decode vs Case when

Decode decode(target_col,null,null,0,0,coalesce(target_col2 / target_col, 0)) Case whencase when target_col1 IS NULL then null when target_col1 = 0 then 0 when (target_col1 is null and target_col1 != 0) then coalesce(target_col2 / target_col1,0) ELSE ....  1. 대규모 데이터 및 복잡한 쿼리인 경우 Case when의 속도가 더 빠름.2. Case 문은 statement 이고 decode 는 func에 해당한다. 3. Case 는 sql / pl/sql 모두 쓰이나, deco..

DB

[DB] SELECT Query VS VIEW

https://stackoverflow.com/questions/22038570/select-query-vs-view Select Query VS View Generally we are aggregating transaction data to one table using SQL Job periodically. Now the customer needs live data so 1 hour or hour is too high. Instead of running job in minutes, team sugges... stackoverflow.com SELECT VIEW 와 SELECT TABLE 의 속도 차이 때문에. 회사에서 개발할 때에 처음에 view에 대한 정확한 이해 없이 접근 - 왜 뷰는 속도가 안날까..

DB

[DB] VERTICA ifnull coalesce

https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/SQLReferenceManual/Functions/Null/IFNULL.htm IFNULL www.vertica.com if null 을 통한 Null처리보다 coalesce 가 더 일반적인 표준이라고 한다. 회사에서 쓰는 쿼리로 테스트 했을 때 1분 50초가 걸리던 쿼리를 40초로 앞당겼으므로, 약 1분 정도 당겼다. 사용법 : 1. IFNULL ifnull(x.temp,0) as TEMP 2. COALESCE COALESCE(x.temp, x.temp2, x.temp3, x.temp4 ... ) as TEMP2, IFNULL은 되도록 사용 자제 할 것.

DB

[DB] postgresql recursive 재귀쿼리

1. 부서의 cd를 상위 부서 (upper_dept)로 가지는 모든 하위 부서 찾기. -- 계층형 db 탐색을 위한 재귀쿼리 WITH RECURSIVE find_dept(dept_cd, dept_name, upper_dept, dept_depth ) AS ( --1 select SELECT dept_cd, dept_name, upper_dept, dept_depth FROM dept WHERE 1=1 AND dept_cd = '첫번째_DEPT' UNION --2 repeat SELECT dept_cd, dept_name, upper_dept, dept_depth FROM find_dept fnd_dpt INNER JOIN dept d ON fnd_dpt.upper_dept = d.dept_cd AND d..

DB

[DB] postgresql TEXT vs VARCHAR vs JSON 타입은 언제 써야하나?

1. 이 TEXT data type은 왜 필요한가? 🤖 일반적인 데이타 타입은 보통 varchar 로 생성해왔었다. 하지만, 오늘은 LOB (BLOB / CLOB 같은 대용량 데이터를 저장하는 컬럼 타입 ) Large Object 가 필요한 상황이다. 많은 데이터를 기록 할 데이터타입을 선택해야하는 상황이라는 것. 사용자의 필기 정보를 JSON 데이터로 저장하고 불러오는 작업을 해야하는데, 필기가 어느정도로 많아질 지 모르기 때문이다 . 필기 정보를 데이터로 저장하는 작업의 JSON 길이가 너무 길기도 길다. 하지만 이런 커다란 데이터 타입을 밀어넣으면 DB 서버가 힘들어 할 지 몰라서 왜? 언제? 써도 되는지? 에 대해 정리한다. 참고로 varchar 나 text 타입이나 모두 65,535 charac..

DB

[DB] MySQL CURRENT_TIMESTAMP

CURRENT_TIMESTAMP 설정 default expression 에 current_timestamp 를 설정하거나. now() 를 설정한다. 이렇게하면 데이터가 생성되는 시점에 찍히므로 서버단에서 지정 할 필요가 없어 간편하다는 장점이 있다. QUERY : alter table tb_spend alter column created_at set default CURRENT_TIMESTAMP; JPA 사용일경우 JPA 를쓴다면, @CreationTimeStamp - 하이버네이트 @CreatedDate - 스프링 둘다 크게 기능상 차이는 없다. 현재 사이드 프로젝트에서는 이런 방식으로 사용하고 있다. @CreatedDate @Column(name="created_at") @JsonFormat(patte..

DB

[CURSOR PAGING] 커서 페이징처리.

🥞 오프셋 기반 페이징에서 -> 커서 방식 페이징으로 변경하기 전에 미리 알아보려 한다. 🥞🥞 오프셋 기반 페이징의 단점 : LIMIT / OFFSET 을 이용할 경우 offset이 늘어나는 양에 따라 비효율적인 동작을 하게된다. 오프셋 이전의 데이터를 모두 조회하고 limit 와 offset에 해당하는 값만 가져오는 방식이기 때문에 대량의 데이터를 가져오는 페이징에 적합하지 않다. 아래는 여러건의 데이터를 삭제하기 위한 쓰레드 작업에 커서 페이징을 적용하려다가 실패한 케이스이다. [AWS S3] object 여러 건 삭제 요청 /220811 수정 목적 : 삭제 총 타겟 : DB상에 있는 데이터 기준으로 1억 8천만 건에 해당. JAVA 에서 aws SDK 를 이용한 삭제 요청시에는 1회 요청 최대 오브..

DB

ORACLE DB DELETE / SHRINK SPACE

✍ 금요일 오후 에러 발생했음. ☁ Tomcat로그를 보니 응답은 성공으로 주지만 소요 시간이 최소 10초 이상이 걸리고있는 상황이었다. ☁ 이전에는 잘 동작하더니 갑자기 느려지는 상황.. ☁ 특히 오래걸리는 API를 살펴봤고 LOG를 기록하는 테이블에 접근하기만 해도 속도가 현저히 떨어지는 현상이 있었다. ☁ DB와 관련된 문제임을 확인하고 바로 DB 상태를 체크. ☁ 전에도 이런 현상이 있던 적이 있어서, ☁ 1. 인덱스를 설정한 값이 잘못되었는지 체크. ☁ 2. API에서 쓰는 쿼리가 지나치게 속도를 많이 잡아먹는 지 체크. ✍ 위 두가지 상황은 아니었고, 2021년도 자료를 백업하고 테이블을 정리하려 했다. ✍ 자주 수정이 일어나는 데이터가 많은 테이블이면서, 또 INSERT를 많이 처리하는 테이..

DB

[ERROR] Oracle dump / import

✍ 운영서버 데이터를 개발서버로 마이그레이션 ✍ DB의 파일을 export 하는 과정 생략 ** 테이블 중에는 CLOB 타입이 포함된 테이블이 존재한다. ☁ ERROR : ORA-00958: tablespace 'tableSpace_name1' does not exist 가 발생했다면, import 하려고하는 테이블스페이스 정보를 동일하게 맞춰줘야 한다. ☁ 필요한 테이블 스페이스정보를 맞춰줘야 하므로 신규 생성.

DB

Oracle CLOB 타입

SELECT CLOBAGG(REPLACE(C.CAP_CTT,'|','') || ' ##### ' ) OVER (PARTITION BY A.MY_ARTCL_ID ORDER BY A.MY_ARTCL_ID RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) AS CAP_CTT FROM TB_MY_ARTCL_CAP C LEFT OUTER JOIN TB_MY_ARTCL A ON A.MY_ARTCL_ID = C.MY_ARTCL_ID WHERE A.INPUT_DTM BETWEEN TO_DATE ('20200501', 'YYYYMMDDHH') AND TO_DATE('20200709','YYYYMMDDHH'); 쿼리부터. CLOB 같은 대용량 텍스트를 listagg..

girin_dev
'DB' 카테고리의 글 목록