STUDY/DB
-
Index ScanSTUDY/DB 2023. 4. 12. 23:42
인덱스 탐색 데이터베이스는 인덱스를 활용하여 빠르게 데이터를 찾을 수 있다. 인덱스 탐색에는 수직적 탐색과 수평적 탐색이 있는데, 수직적 탐색을 통해 먼저 찾고자 하는 데이터의 범위를 결정한 후, 수평적 탐색을 수행하여 실제 데이터를 검색한다. 1. 수직적 탐색 - 인덱스에서 데이터를 찾기 위해 트리 구조를 따라 내려가는 과정 - 대표적인 인덱스 구조인 B-Tree 인덱스에서 수직적 탐색은 루트 노드에서 시작하여, 찾고자 하는 데이터에 해당하는 리프 노드에 도달할 때까지 하위 노드로 이동하는 과정 - 트리의 깊이에 비례하는 시간이 소요 2. 수평적 탐색 - 인덱스에서 데이터를 찾기 위해 동일한 레벨의 노드들 사이를 이동하는 과정 - B-Tree 인덱스의 경우, 리프 노드들은 연결 리스트로 구성되어 있음 ..
-
개발자를 위한 인덱스 생성과 SQL 작성 노하우 : 22-24STUDY/DB 2022. 8. 30. 21:16
- 오라클 에러 메시지 1. "ORA-00001: 유일성 제약조건에 위배됩니다" 테이블에 PK가 있거나 UNIQUE INDEX가 있을 때, 중복되게 INSERT 하면 발생한다. 2. "ORA-00942: 테이블 또는 뷰가 존재하지 않습니다" 개발자의 오타에 의한 경우가 가장 흔하지만, 실제로 테이블이 생성됐는지 확인이 필요하다. 또한 권한이 없을 때 발생하는 경우도 존재한다. 권한이 없는 경우에는 권한을 요청하거나 직접 권한을 부여할 수 있다. GRANT SELECT, INSERT, UPDATE, DELETE ON [테이블명] TO [유저명] 마지막으로 대소문자 사용에 의한 문제일 수 있다. 오라클은 대소문자 구분이 없으며 자동으로 테이블이 대문자로 생성되지만, 따옴표로 감싸서 소문자로 테이블을 생성할 ..
-
개발자를 위한 인덱스 생성과 SQL작성 노하우 : 18-20STUDY/DB 2022. 8. 15. 23:06
- 오라클 기능 1. FLASHBACK 오라클에서 삭제 혹은 갱신된 레코드는 commit 하기 전에는 rollback 명령어를 사용하면 원복이 가능했다. 만약 이미 commit 명령어가 실행돼 완전히 삭제 혹은 갱신됐다면, 지금까지는 레코드 원복이 불가능했지만, 오라클 10g 이후부터는 flashback 기능을 제공해 commit 이전 상태의 레코드도 조회할 수 있게 됐으며, 레코드 원복까지도 가능하다. commit/rollback 여부와 상관없이 한시적으로 데이터를 백업하는 기능을 지원해, 특정 시점의 데이터를 원복 가능하게 됐는데, flashback 기능은 오라클 서버에 부하를 주므로 사전에 설정된 제한 시간만큼만 지원된다. db_flashback_retention_target 에서 설정된 시간을 확..
-
개발자를 위한 인덱스 생성과 SQL작성 노하우 : 15-17STUDY/DB 2022. 8. 10. 22:24
- 유용한 오라클 힌트절 1. 접근 순서를 결정하는 힌트절 ORDERED : FROM 절에 나열된 테이블 순서대로 접근한다.(SQL문에 종속적) LEADING : 테이블 접근 순서를 명시적으로 표현한다.(SQL문에 독립적) SELECT /*+ ORDERED */ 컬럼들, ... FROM 고객 A, 주문 B WHERE A.고객번호 = B.고객번호 AND A.고객명 = ? AND B.주문일자 = ? SELECT /*+ LEADING(B A) */ 컬럼들, ... FROM 고객 A, 주문 B WHERE A.고객번호 = B.고객번호 AND A.고객명 = ? AND B.주문일자 = ? ORDERED 힌트절은 FROM절에 나열된 테이블 순으로 접근을 유도하지만, LEADING 힌트절은 테이블 접근 순서를 명시적으로..
-
개발자를 위한 인덱스 생성과 SQL 작성 노하우 : 12-14STUDY/DB 2022. 8. 1. 23:17
- 오라클의 조인 방식 관계형 데이터베이스에서 쿼리는 조인(Join) 없이 단독으로 사용하는 경우가 거의 없다. 대부분의 쿼리는 여러 테이블 간의 관계를 맻는 경우이고, 오라클의 조인은 이러한 테이블 간 관계에 있어서 어떤 방식으로 접근하는가에 대한 조인이다. 오라클에서의 조인은 방식에 따라 쿼리의 비용과 성능이 달라지기 때문에 중요하다. 조인 방식 Nested Loop Join : 순차적 루프에 의한 접근 방식, 소량 데이터 처리에 적합 Sort Merge Join : 정렬을 통한 접근 방식, 거의 사용하지 않음 Hash Join : 해시 함수를 이용한 접근 방식, 대량의 데이터 처리에 효율 Nested Loop Join(NL 조인) 보통 가장 흔하게 접할 수 있는 오라클 조인 방식으로 OLTP(Onl..
-
개발자를 위한 인덱스 생성과 SQL작성 노하우 : 9-11STUDY/DB 2022. 7. 25. 00:15
- 공정쿼리 작성법 공정쿼리란, 무엇을 어떻게 조회할지에 대한 내용을 담고 있고, 쿼리 자체만으로 인덱스 생성 위치와 실행계획을 알 수 있는 쿼리이다. 무엇을 어떻게 조회할지에 대한 내용을 모두 포함해서 쿼리를 작성하므로 공정쿼리로 작성한 쿼리에서는 쿼리의 결과뿐만 아니라 생성해야 할 인덱스 정보와 접근돼야 할 실행계획 정보까지 모두 알 수 있다. 오라클 CBO(Cost Based Optimizer) 방식은 통계정보를 이용해 비용을 계산한 후 SQL을 수행한다. 통계정보가 존재하고 비교적 정확하다면, 오라클은 대부분의 쿼리에서 올바르고 적절한 실행계획을 제공하고 쿼리를 수행한다. 만약 통계정보가 존재하지 않거나 잘못된 정보를 갖고 있다면 정확한 실행계획을 제공하지 못하고 쿼리 수행도 최적이지 않다. 올바..
-
개발자를 위한 인덱스 생성과 SQL작성 노하우 : 인덱스STUDY/DB 2022. 6. 29. 22:02
1. 인덱스는 분류이다. 분류의 특징 분류의 역사는 인류의 역사와 궤를 같아한다. 분류는 인간 세계뿐만 아니라 동물의 세계에서도 존재한다. 수많은 자료를 정리,관리,검색한다는 의미에서 분류는 DB 그 자체이다. 과거의 계층적인 분류부터 최근의 컴퓨터정보 분류에 이르기까지 분류는 지속적으로 발전했다. 체계적으로 정리된 자료는 검색 시간을 줄여 비용 절감으로 연결괸다. 이것이 분류의 힘이다. 물리적 분류의 특징 직접적이고 시각적인 분류 방식 인류 역사와 함께 널리 사용됨 현실 세계의 분류에서 적합 분류 대상과 분류 정보 일체형 동일한 시공간에서 오직 한 분류만 가능 분류 대상과 분류 정보는 1:1 관계 논리적 분류의 특징 간접적이고 추상적인 분류 방식 컴퓨터 사용과 더불어 폭넓게 사용 디지털 세상의 분류에 ..
-
그림으로 공부하는 오라클 구조 : 커넥션과 서버 프로세스의 생성STUDY/DB 2022. 5. 30. 00:32
1. 오라클의 접속 동작 1.1 소켓의 동작 오라클은 TCP/IP의 소켓(socket)을 네트워크 통신 수단으로 사용하고 있다. 한 번 소켓을 만들어 두면 소켓을 읽고 쓰기만 해도 송수신을 구현할 수 있으므로 프로세스의 측면에서 편리한 기능이다. 네트워크의 드라이버와 OS의 라이브러리가 송수신을 수행하며, 네트워크 안에는 여러 개의 소켓이 존재한다. 소켓은 '주소(address)'와 '포트(port)번호'라고 불리는 번호의 조합으로 식별할 수 있고, 소켓의 연결에서 중요한 부분은 연락이 오기만을 기다리는 프로세스가 존재한다는 점과 연결할 때는 송신 측에서 '주소'와 '포트'를 반드시 지정해야 한다는 점이다. 1.2 오라클에서 소켓의 동작 오라클에서도 위 그림과 같이 동작하며, 오라클에서는 수신을 기다리는..