DB (21) 썸네일형 리스트형 Oracle - INDEX 아이디 중복 체크 시 인덱스를 생성하려고 했다. 하나의 값이라 빠르기 때문이다.그런데 문제가 생겼다. 알고보니 Oracle DBMS의 경우 Primary Key는 자동 인덱스화한다고 한다. DB Deadlock 운영체제에서 프로세스 간의 자원 점유로 인한 Deadlock을 배웠는데 DB 데드락도 생각나서 글을 쓴다. DB Deadlock정의 : 데이터베이스에서 교착 상태는 둘 이상의 트랙잭션이 서로가 잠금을 포기하기를 기다리는 상황이다. lock일어나는 이유를 알아보자. 예를 들어 DML(select, insert, update, delete)를 하게 되면먼저 Lock이되고 테이블에 대한 처리를 하기 때문에 발생하는 것이다. 다음 이미지를 보자. 테이블 A와 B가 있다. 서로를 참조해서 작업 수행해야 하는데 서로 lock이 걸려 있어서 접근할 수 없는데계속해서 기다리는 상황이 되는 것이다. 그렇다면 해결방법을 알아보자 해결방법1) 교착상태 감지 및 TimeOut일정시간이후 트랙잭션이 실행되지 않았을 경우 롤백.. 인덱스(Index) Re 인덱스는 데이터를 빠르게 찾을 수 있는 하나의 장치이다. 러프하게 보면 인덱스는 이진 트리 검색이다. 우선 인덱스를 보기 전에 이진 트리(Binary Tree)를 보자. 인덱스가 없다면 DB 풀스캔이 일어난다. 최악의 경우 21번을 찾으면 1부터 21까지 찾아야 하는 것이다.그러나 이진트리를 보자 그러면 10(루트 노트)부터 시작해서 21을 찾아가므로 2번만 찾아가면 된다.그러므로 상당히 효율적이다. 인덱스도 이와 같다. 그러나 더 효율적인 방법이 B 트리이다. 1) B-Tree B-Tree를 보면 이진 트리검색보다 범위가 넓으므로 한 단계에서 더 많은 것을 선택할 수 있다. 그러므로기존 이진 트리검색보다 훨씬 효율적이게 되는 것이다. 2) B+TreeB-Tree보다 효율적인 것이 B+Tree이다.. VARCHAR, CHAR 문득 데이터 베이스 설정하다가 데이터 베이스의 자료형은 VARCHAR과 CHAR이 있다. 주로 VARCHAR를 사용했는데 그 이유를 생각해보자. 간단히 설명하면 확정되지 길이의 문자열 데이터가 들어올 때는 VARCHAR을 쓰고 확정적인 문자열을 쓸 때는CHAR을 써라이다. CHAR에 경우는 고정적으로 데이터를 저장한다. 예를 들어 CHAR(10)을 선언했을 경우 한 글자를 넣어도데이터 상에서 10의 공간을 차지한다. 그러나 VARCHAR의 경우 VARCHAR(10)을 선언했을 경우 3글자를 넣으면 데이터 상에서 10의 공간을 차지한다.그러므로 대부분 VARCHAR을 쓰는 것이다. 그럼 무조건 VARCHAR을 쓰는 것이 좋은 것이 아닌가에 대한 생각을 할 수도 있지만 VARCHAR(10)도3글자 크기의 .. DDL 코드 ☏ 회사 프로젝트의 경우에는 DML을 주로 사용했지만 Toy Project하면서 DDL도 많이 건드리게 되었다.외우는 것을 최우선으로 하고 참고하려고도 많이 오자. ※ 주기적으로 필요한 것은 추가할 예정이다. 1) CREATE 예시(주키, 참조 포함) 1) employee_id를 주키로 설정한다.2) 테이블이나 컬럼에 대한 설명(Comment)를 해주면 좋다.3) ON DELETE CASCADE를 해줘야 참조키도 삭제된다. 2) ALTER TABLE 예시(참조키를 추가하는 경우) 1) C라는 테이블 생성해서 ORDERS 테이블의 order_id가 C테이블의 c_id를 참조한다. → 기존에 없었던 참조 관계를 추가하기 위함이다. 3) ALTER TABLE 예시(컬럼 이름 바꾸기, 컬럼 추가하기)1) TA.. [ Full Table Scan ] vs [ Index Scan ] DDL 공부하려다가 INDEX에 관한 글을 보고 여기를 먼저왔다. 1) 전체 테이블 스캔 ( Full Table Scan ) ● 테이블에 존재하는 모든 데이터를 읽어 가면서 조건에 맞으면 결과로서 추출하고 조건에 맞지 않으면 버리는 방식이다. ● Oracle의 경우, 테이블의 고수위 마크(HWM, High Water Mark) 아래의 모든 블록을 읽는다.※ 고수위 마크(HWM) : 테이블에 데이터가 쓰여졌던 블록 상의 최상위 위치 ● 위 그림과 같이 일반적으로 블록들은 서로 인접되어 있기 때문에, Full Table Scan은 한 번의 I/O에 여러 블록을 옮겨온다. 즉, 한 번의 I/O에 데이터를 다중 블록 단위로 메모리에 가져오기 때문에, Row당 소요되는 입출력 비용이 인덱스 캔에 비해.. DDL, DML, DCL 이미 알고 있다고 생각하지만 처음 배운다고 생각하고 천천히 해보자DDL, DML, DCL을 알아보기 전에 SQL이란 것을 먼저 알아보자 SQL- 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이다.- 관계형 데이터베이스 관리 시스템에서 자료의 검색과 관리, 데이터베이스 스키마 생성과 수정, 데이터 베이스 객체 접근 조정 관리를 위해 고안되었다. SQL문 실행 순서 예제다음은 기본적인 SQL문의 순서를 나타낸 것이다. ⑤ SELECT① FROM② WHERE③ GROUP BY④ HAVING⑥ ORDER BY DDL(Data Definition Language) : 데이터 정의 언어 (DBA)정의 : 테이블과 컬럼을 정의하는 명령어로 생성, 수정, 삭.. GROUP BY, DISTINCT DDL, DML, DCL을 공부하다가 정리해야할 것 같아서 여기로 왔다.GROUP BY, HAVING : GROUP BY는 주로 중복을 제거하게 된다. GROUP BY로 조회한 컬럼에 대한 조건을 다룬다. GROUP BY, DISTINCT 둘 다 중복제거인데 무슨 차이가 있지? 어떤 글에서는 GROUP BY가 중복을 제거하고 자동 집계를 하므로 DISTINCT가 중복 자체는 더 효율적이라고 한다.그 글에서는 맞고 나의 글에서는 틀리다. 다음의 간단한 예시를 보자. 이미지를 보면 정렬이 되지 않은 기본 조회문이다. 위를 보면 각각 DISTINCT와 GROUP BY이다. 결과 값이 똑같이 나오며 정렬이 된다면 beta가 먼저 나와야 한다.하지만 둘 다 beta가 먼저 나오지는 않지만 [ aaa, alpah.. 이전 1 2 3 다음