@ 17. 1 ~ 18/DB
-
[MySQL] 실행계획 & select_type@ 17. 1 ~ 18/DB 2018. 7. 1. 21:11
Mysql에서는 EXPLAIN으로 실행계획을 확인할 수 있다.실행계획을 이해할 수 있어야만 실행 계획의 불합리한 부분을 찾아내고 더욱 최적화된 방법으로 실행 계획을 수립하도록 유도할 수 있다. Mysql서버에서 쿼리가 실행되는 과정은 크게 3가지로 본다1. 사용자로부터 요청된 SQL문장을 잘게 쪼개서 Mysql서버가 이해할 수 있는 수준으로 분리첫번째 단계를 SQL파싱이라고 하며 Mysql서버의 SQL파서라는 모듈로 처리한다.SQL문장이 문법적으로 잘못됐다면 이단계에서 걸러진다.SQL파스트리가 만들어진다. 2. SOL의 파싱 정보(파스트리)를 확인하면서 어떤 테이블로부터 읽고 어떤 인덱스를 이용해 테이블을 읽을지 선택대표적으로 아래 4가지를 수행한다.불필요한 조건의 제거 및 복잡한 연산의 단순화여러 테이..
-
[MySQL] 조인 관련 주의사항 (3)@ 17. 1 ~ 18/DB 2018. 6. 28. 23:08
MySQL 조인 처리에서 특별히 주의해야할 부분은 1. 실행 결과의 정렬순서2. INNER JOIN과 OUTER JOIN의 선택2가지 정도이다. 조인 실행 결과의 정렬 순서일반적으로 조인으로 쿼리가 실행되는 경우, 드라이빙 테이블로부터 레코드를 읽는 순서가 전체 쿼리의 결과 순서에 그대로 적용되는 것이 일반적이는 네스티드-루프 조인 방식의 특징이기도 하다.SELECT de.dept_no, e.emp_no, e.first_nameFROM dept_emp de, employees eWHERE e.emp_no=de.emp_noAND de.dept_no='d005';실행 계획은 아래와 같다 id select_type table type key key_len ref rows Extra 1 SIMPLE de ref..
-
[MySQL] 조인 (2)@ 17. 1 ~ 18/DB 2018. 6. 28. 22:44
카테시안 조인카테시안 조인은 FULL JOIN 또는 CROSS JOIN이라고도 한다. 일반적으로는 조인을 수행하기 위해 하나의 테이블에서 다른 테이블로 찾아가는 연결 조건이 필요하다.하지만 카테시안 조인은 조인 조건 자체가 없이 2개 테이블의 모든 레코드 조합을 결과로 가져오는 방식이다. 조인이 되는 테이블의 레코드 건수가 1 ~ 2건 정도로 많지 않을때라면 문제가 되지는 않는다. 하지만 레코드 건수가 많아지면 조인의 결과 건수가기하급수적으로 늘어나므로 Mysql서버 자체를 응답 불능 상태로 만들어버릴 수도 있다. 조인의 양쪽 테이블이 모두 레코드 1건인 쿼리를 제외하면 애플리케이션에서 사용되는 카테시안 조인은 의도하지 않았던 경우가 대부분이다. Mysql에서 CROSS JOIN은 INNER JOIN과 ..
-
[MySQL] 테이블 조인 (1)@ 17. 1 ~ 18/DB 2018. 6. 26. 21:38
Mysql 조인 방식은 네스트드 루프로 알려진 중첩된 루프와 같은 형태이다. 조인의 종류INNER JOIN과 OUTER JOIN으로 구별된다.OUTER JOIN은 다시 LEFT OUTER JOIN(LEFT JOIN)과 RIGHT OUTER JOIN(RIGHT JOIN), FULL OUTER JOIN으로 구분할 수 있다.그리고 NATURAL JOIN과 CROSS JOIN(FULL JOIN, CARTESIAN JOIN)으로도 구분할 수 있다. 조인의 처리에서 어느 테이블을 먼저 읽을지를 결정하는 것은 상당히 중요하다.작업량 자체가 달라지기 때문이다. INNER JOIN은 어느 테이블을 먼저 읽어도 달라지지 않으므로 옵티마이저가 조인의 순서를 조절해서 다양한 방법으로 최적화를 수행할 수 있다.OUTER JOI..
-
인덱스 관련@ 17. 1 ~ 18/DB 2018. 2. 27. 00:58
인덱스 장점검색 속도가 빨라질 수 있다.그결과 쿼리의 부하가 줄어들어서 시스템 전체의 성능이 향상된다. 인덱스 단점인덱스가 데이터베이스 공간을 차지해서 데이터베이스 크기의 10% 정도의 추가 공간이 필요하다.데이터의 변경작업(INSERT Update Delete)이 자주 발생되면 오히려 성능이 나빠진다. 클러스터형 인덱스 : 영어사전처럼 처음부터 순서가 정렬되어있다.테이블당 한개만 생성할 수 있다.행 데이터를 인덱스로 지정한 열에 맞춰서 자동 정렬한다.PK를 지정하면 자동으로 해당열에 생성된다. 또한 중복되지 않는 UNIQUE도 가능하다.(왜냐면 테이블당 한개만 생성할 수 있으니까..그렇다고PK나 UNIQUE가 반드시 클러스터형 인덱스만 아니다 비클러스터형으로 설정도 가능)(비클러스터형으로 하면 클러스터..
-
각 키 설명@ 17. 1 ~ 18/DB 2018. 2. 27. 00:21
기본 키 제약PK라고도 부르는 것. 중복이 안되며, NULL값이 안된다. 인터넷 쇼핑몰 회원가입을 보면 대부분 회원아이디로 설정한다.자동으로 인덱스가 생성된다. 테이블에선 기본키를 하나 이상의 열에 설정할 수 있다.(두개의 열을 합쳐서 기본키로 설정할수 있다.)기본키가 없어도 ㅇ테이블은 구성가능하지만 대부분 해줘야한다고 생각해야한다. 외래 키 제약FK라고도 부르는 것. 두 테이블 사이의 관계를 선언함으로써 데이터의 무결성을 보장해주는 역활을 한다.즉 외래키를 설정하면 하나의 테이블이 다른 테이블에 의존하게 된다.외래키를 정의하는 테이블을 외래키 테이블이라 하고외래키에 의해서 참고가 되는 테이블을 기준 테이블이라고 한다.반드시 기준 테이블에 데이터가 있어야 한다. 기준 테이블은 PK나 Unique 조건이 ..
-
JOIN 관련@ 17. 1 ~ 18/DB 2018. 2. 26. 23:44
일대다 관계를 해결하기 위해 사용.일대다 관계는 보통 일(기본키 pk)와 다(외래키)를 활용한다. INNER JOIN가장 많이 사용되는 조인으로 대개의 업무에서 사용된다. 일반적인 조인이라고 보면된다.사용되는 예구매 테이블이 있고 여기에는 물건을 구매한 사용자의 아이디와 물건 등의 정보만 있다.그런데 물건을 배송하기 위해 회원의 주소를 알아야하는데 회원의 주소정보는 회원 테이블에 있다.이때 결합하는것이 INNER JOIN이다SELECT FROM INNER JOIN ON [WHERE 검색조건] SELECT * FROM buyTbl AINNER JOIN userTbl BON buyTbl.userId = userTbl.userIdWHERE buyTbl.userId = 'BBB' 위에 A, B는 ..
-
ACID 그리고 CAP개념@ 17. 1 ~ 18/DB 2017. 9. 7. 00:38
Atomicity : 분해할 수 없이 원자적이고Consistency : 일관된 데이터를 유지하고Isolation : 고립되어 다른 연산이 끼어들 수 없고Durability : 데이터가 영원히 반영된 상태로 있는 ACID 트랜잭션은 관계형 데이터베이스에서 여러 개의 SQL연산을 하나의 단일 트랜잭션으로 처리하는 것을 의미한다.여러개의 테이블에 대해서 읽고 쓰고 하는 행동을 하나의 연산처럼 사용하는 것이다. 트랜잭션에서 가장 중요한 개념은 원자성이다.여러개의 SQL 연산이 하나의 연산처럼 동작해야 한다. 어느것 하나라도 실패했다면 모든 연산이 실행되지 않아야 한다. 일관성은 같은 시점에 접속하는 클라이언트들은 항상 같은 데이터를 보고 있어야 한다는 것고립성은 트랜잭션이 수행되는 동안에 다른 연산이 끼어들지 ..