MYSQL vs Oracle 인덱스 차이 MySql과 Oracle은 인덱스 동작 방식에 있어서 약간의 차이가 존재한다. MySql에서는 일반적으로 한번의 쿼리에서는 하나의 인덱스만 사용됩니다. 즉, 여러 인덱스가 걸려있어도 MySQL의 옵티마이저가 쿼리 실행 계획을 결정할때 인덱스의 선택도(카티널리티)를 고려하여 최적의 인덱스 하나만 선택한다. 그렇기때문에 복수 컬럼을 동시에 인덱스를 태우고자 할 경우에는 복합 인덱스 하나만 사용해야 된다. 반면 Oracle은 비교적 더 복잡한 옵티마이저를 갖고 있어, 쿼리 실행 계획을 수립할때 다중 인덱스 조인이나 다중 칼럼 인덱스를 통해 여러 인덱스를 동시에 활영 할 수 있다. 다만, 무조건 Oracle에서도 모든 쿼리에서 여러 인덱스를 동시에 사용하는 것이 아니라 ..
CTE란? Common Table Expression 의 약어로, 일반적으로 공통 테이블 표현식이라고 번역됩니다. sql 쿼리내에서 임시로 정의된 이름이 지정된 집합으로 간주되는 가상의 테이블로 복잡한 쿼리를 간결하게 작성하고, 재사용 가능한 부분을 정의하며 가독성을 향상시킬 수 있습니다. 이러한 CTE를 Oracle과 Mysql8.0 이상에서는 WITH 구문절로 제공하고 있습니다. WITH(CTE) 구문절 사용법 WITH TABLE_NAME AS ( SELEECT COL1,COL2 FROM TABLE WHERE CONDITION ) SELECT * FROM TABLE_NAME WHERE COL1 = VALUE; 위의 형식으로 ' WITH 테이블명 AS (SELECT ~) ' 의 형식으로 Oracle과 ..
데이터를 산출해야하는 건이 있었는데 요청건수가 너무 많아서 일반 SQL 문만으로는 불가능했었습니다. COUNT로 대략 건수를 확인해봤을때 14594519 건정도....? 1차로 실행계획을 확인 후에 조인으로 연결된 FROM 절이 PK를 타고 있지 않아서 해당 부분 PK 탈수 있도록 서브쿼리로 변경했습니다 두번 TABLE FULL SCAN하는것을 그나마 한번으로 변경....ㅜ.ㅜ 2차로 힌트절을 이용해보기 위해 관련된 힌트절을 찾다가 PARALLEL 힌트를 알게 되어 공유하고자 합니다. 페러럴 힌트는 병렬 처리 작업을 지원해줍니다. 기본적으로는 한개의 프로세스를 통해서 실행하는데 페러럴 힌트를 이용하면 여러개의 쓰레드에 분산하여 N개의 프로세스로 작업을 수행하기때문에 빠른 속도를 확인해볼 수 있습니다. 하..
DB툴은 PL/SQL Developer 툴을 사용했습니다 SELECT * FROM 테이블명 FOR UPDATE; 상단의 자물쇠 모양을 클릭해주세요 자물쇠 모양이 풀리면서 수정이 가능한 상태로 변경됩니다. 원하는 값을 입력해주세요~ TEST 로 수정했더니 초록색 체크 모양 버튼이 활성화 되었습니다. 변경 내용을 입력 완료 했으면 초록색 체크 모양 버튼을 클릭해주세요 마지막으로 자물쇠 모양 버튼을 다시한번 클릭하면 자물쇠가 잠기면서 수정이 불가능한 상태로 바뀝니다 이제 변경 내용을 커밋만 해주면 수정사항이 반영됩니다~ 저는 PL/SQL Developer 툴에서 제공하는 커밋 버튼을 이용해서 커밋을 진행했습니다 만약에 아래와 같이 기록되어있는 몇천건의 데이터를 INSERT 혹은 UPDATE 해야할때도 사용 가..
힌트에 대한 정의와 사용법 일부를 이전 포스트에 기록을 진행했었다. https://devnoong.tistory.com/4 [DB] 힌트에 대해서 힌트(Hint)란? 오라클 옵티마이저(Optimizer) 대신 개발자가 직접 최적의 실행 경로를 작성해 주는 것이다. 단, 힌트, 인덱스, 조인의 개념을 정확히 알고 사용하지 않은 무분별한 힌트의 사용은 성능 devnoong.tistory.com 이번 포스트에는 사용법과 예제에 대해 조금 더 알아보고자한다. https://livesql.oracle.com/ Oracle Live SQL This tutorial provides an introduction to the Structured Query Language (SQL), learn how to create ..
힌트(Hint)란? 오라클 옵티마이저(Optimizer) 대신 개발자가 직접 최적의 실행 경로를 작성해 주는 것이다. 단, 힌트, 인덱스, 조인의 개념을 정확히 알고 사용하지 않은 무분별한 힌트의 사용은 성능의 저하를 초래하기 때문에 최적의 실행 경로를 알고 있을 경우 적절하게 사용하여야 한다. 사용이유 Select 조회 컬럼이 인덱스 컬럼으로만 구성되어 있을 경우, 인덱스 영역에서 스캔하기때문에 조회 속도도 빠르고 인덱스 컬럼이 설정된 대로 정렬이 돼서 조회가 된다. 하지만 인덱스컬럼뿐만 아니라 다른 컬럼도 포함되어 있을 경우 FullTableScan을 시도하기때문에 조회 속도가 느리고 정렬이 되지 않는다. 하지만 힌트절을 사용한다면, 인덱스 영역에서 인덱스가 생성된 순서대로 스캐닝을 시도하고 정의 해..
INDEX란? RDBMS에서 대용량의 데이터가 존재할 때, 특정 데이터를 검색하기 위해 테이블을 FullScan하는것이 아니라 Range Scan을 통해 빠르게 검색할 수 있도록 도와주는 자료구조이다. 정렬 된 구조로 ROWID가 존재하기 때문에 별도의 정렬이 필요없어서 ORDER BY를 사용하는것보다 훨씬 효율적이다. 데이터를 찾은 후 ROWID를 이용하여 테이블 레코드를 찾아간다. 인덱스의 자료구조 인덱스의 자료 구조 종류는 다양하게 존재한다. 그중에서 B-Tree구조 , B+Tree , B*Tree 구조와 HashTables 구조를 많이 사용한다. ▶ B-Tree 구조 자식의 노드 개수가 2개이상인 트리구조를 뜻한다. B-Trees는 이진트리에서 발전되어 모든 리프노드들이 같은 레벨을 가질 수 있도..
Oracle이란? RDBMS 종류에 해당하는 데이터베이스를 지칭합니다. Oracle 데이터베이스를 생성 및 사용하기 위해서는 두가지 작업이 필요합니다. ① Oracle 다운로드 우선 Oracle 데이터베이스가 생성이 되어야 사용을 할 수 있기때문에 데이터베이스를 생성할때 필요한 Oracle 소프트웨어를 다운받아야합니다. https://www.oracle.com/tools/downloads/sqldev-v192-downloads.html ② sql developer 다운로드 데이터베이스를 생성했으면 해당 DB를 DDL,DML,DCL 하기 위한 개발툴이 필요합니다. 무료 개발툴 sql developer를 다운받아서 사용 후 필요에 따라 명령어를 수행합니다. https://www.oracle.com/tools..