본문 바로가기

데이터베이스/ORACLE

(54)
[ORACLE] 인덱스 생성 전후, 쿼리 튜닝 전후 속도 인덱스 제거하고 쿼리 실행 : 3.622 인덱스 생성 후 쿼리 실행 : 0.853 (1/4 줆) 쿼리 튜닝 후 : 0.011 (1/80 줆) WITH WHOLE AS ( -- 1. 컬럼을 가공하여 조건주지 말고 -> 조건을 가공 SELECT INDUSTRY_CODE CD, CARD_TRANSACTION_AMOUNT AMT FROM CARD_TRANSACTION WHERE CARD_NUM IN (SELECT CARD_NUM FROM CARD_CONTRACT WHERE RESI_NUM = '9203101937988') AND CARD_TRANSACTION_TIME >= TO_DATE('2020'||'01', 'YYYYMM') AND CARD_TRANSACTION_TIME < ADD_MONTHS(TO_DATE..
[Oracle] 천만 건 업데이트 속도 : 7시간
[Oracle] SQL 작업 내역 (20.09.23-1) SELECT * FROM TABS; SELECT * FROM CARD_PRODUCT_LIST; SELECT * FROM CARD_CONTRACT; SELECT * FROM COMMON_CODE; SELECT * FROM MEMBER WHERE ID = 'HELLO'; SELECT * FROM OPEN_CARD_TRANSACTION; DELETE FROM OPEN_CARD_TRANSACTION; --COMMIT; --INSERT INTO OPEN_CARD_TRANSACTION VALUES('1', TO_DATE('2018-01-01 22:30:55', 'YYYY-MM-DD HH24:MI:SS'), '89000', 'SKT', 'I13', '9203101937988', '신한카드', '일시불'); -- 거래..
[Oracle] CARD_TRANSACTION INDEX 생성 CREATE INDEX IDX_CARD_TRANSACTION ON CARD_TRANSACTION(CARD_NUM, CARD_TRANSACTION_TIME); 천만건의 데이터 속도가 미친듯이 빨라졌다. WITH WHOLE AS( SELECT CARD_TRANSACTION_TIME, CARD_TRANSACTION_AMOUNT, CARD_TRANSACTION_CONTENT, INDUSTRY_CODE FROM CARD_TRANSACTION WHERE CARD_NUM IN(SELECT CARD_NUM FROM CARD_CONTRACT WHERE RESI_NUM = 9203101937988) AND TO_CHAR(CARD_TRANSACTION_TIME, 'YYYY') = 2020 AND TO_CHAR(CARD_TR..
[Oracle] ORA-30009: Not enough memory for CONNECT BY operation 아하! 어차피 cross join 되버리는구남? cross join이 이상황에 쓰는게 맞나... 테이블 행 x 테이블 행 만큼 돌아버리는데. 흐음!! 뭐라해야할까. 아직 DB 초보라 정말 .. 헷갈린다. 나중에 다시 보고 웃을 날이 오길! -- 수행 전 오전 4:48 => Not enough memory for CONNECT BY operation -- ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 1024M; => ORA-02097: ORA-47500: -- alter system set pga_aggregate_target = 100M scope = both; -- alter session set sort_area_size = 2G; => ORA-02248: invalid o..
[Oracle] 두 테이블 곱하기 : 길이가 다른 테이블을 from절에 두면, 두개의 테이블이 곱해진다 (랜덤 데이터 생성에 응용) SQL developer 열어서 직접 확인하면서 하길 바람. 그래야 의미가 다가온다. CREATE TABLE TMP_REG( REG VARCHAR2(10) ,RATE NUMBER(3,1) ); DELETE FROM TMP_REG; INSERT INTO TMP_REG SELECT '서울' AS REG, 18.8 AS RATE FROM DUAL UNION ALL SELECT '부산' , 6.6 AS RATE FROM DUAL UNION ALL SELECT '대구' , 4.8 AS RATE FROM DUAL UNION ALL SELECT '인천' , 5.7 AS RATE FROM DUAL UNION ALL SELECT '광주' , 2.9 AS RATE FROM DUAL UNION ALL SELECT '대전' ..
[Oracle] n초당 1개의 row만들기 : DATE 하루(86400 건) 만들기 connect by level과 trunc(sysdate) 개념이 합쳐져서.. 구글링의 결과 만세 select level,to_char(trunc(sysdate) + (level-1)/24, 'YYYY-MM-DD HH24:MI') AS SysDater,to_char(trunc(sysdate) + (level-1)/24, 'HH24:MI') AS SysHour from dual connect by level
[Oracle] DATE 타입의 컬럼이 2018/01/01으로 보여도 초 데이터까지 있다. DROP TABLE TEST_DATE; CREATE TABLE TEST_DATE( DATE_A DATE ); INSERT INTO TEST_DATE VALUES(TO_DATE('20180101010101', 'YYYYMMDDHH24MISS')); INSERT INTO TEST_DATE VALUES(TO_DATE('20180102', 'YYYYMMDD')); SELECT DATE_A FROM TEST_DATE; SELECT TO_CHAR(DATE_A, 'YYYY-MM-DD HH24:MI:SS') FROM TEST_DATE;