가끔 콘솔상태에서 쿼리결과를 csv파일로 뽑아내야 될 때가 있다.
mysql에서는 다음과 같이 하면 된다.
SELECT column1, column2,column3 INTO OUTFILE "./output.csv" FIELDS TERMINATED BY ','
FROM TableA

위에서 ./output.csv 가 파일이 생성될 경로가 되며 생략했을 때는 mysql이 설치된 디렉토리에 저장된다.


오라클에서는 imp/exp 툴을 이용해 쉽게 디비를 백업/복구할 수 있는데 mysql도 마찬가지로 잘 지원된다.
먼저 디비를 백업받을 땐 다음과 같이 한다.

#데이터베이스 안의 테이블 백업 받기
mysqldump -u 아이디 -p 데이타베이스 테이블명 > 백업테이블명.sql


#데이터베이스 전체 백업 받기
mysqldump -u 아이디 -p 데이타베이스 > 백업화일명.sql

#복구
mysql -u아이디 -p 데이타베이스 < 백업화일명.sql


오라클과 달리 파일형태는 바이너리가 아니고 텍스트형태인것 같다.


지금 회사에서 진행하고 있는 프로젝트가 있는데 mysql을 사용하고 있다.
지금까지는 거의 오라클만 사용해서 mysql에도 오라클의 execution plan같은 것을 볼 수 있는 방법이 있을까 찾아봤는데 역시나 답은 있었다.
일단 실행계획을 뜨려면 다음과 같이 쿼리를 날려준다.

EXPLAIN
SELECT *
FROM AAA
WHERE id = 'abc';

그러면 다음과 같이 썰렁한 결과를 볼 수 있을 것이다.
id     select_type    table    type    possible_keys       key         key_len     ref        rows      Extra
---------------------------------------------------------------------------------------------
1       simple           AAA    const    PRIMARY       PRIMARY     62            const       1

여기서 각 컬럼의 의미는 다음과 같다

- table : 테이블 명
- type : 조인의 타입
    system : 테이블이 하나의 레코드만 가지는 경우
    const : 테이블에 조건을 만족하는 레코드가 하나일 때, 상수 취급
    eq_ref : 인덱스가 UNIQUE이거나 PRIMARY KEY인 경우의 조인으로 const를 제외한 조인 중 가장 좋은 형태
    ref : eq_ref와 다른 점은 UNIQUE가 아닐 경우 사용한다는 것.
    range : 조건에 레코드의 범위가 주어진 조인.
    index : all 형태와 비슷하며, 인덱스를 사용한다.
    all : 모든 레코드를 스캔한다.
- possible_keys : 테이블에서 사용 할 수 있는 키(인덱스)
- key : possible_keys에 나온 키 중에서 실제로 사용한 키
- key_len : 키의 길이
- ref : 인덱스를 사용할 때 어떤 컬럼과 조건이 맞아야 하는지
- rows : 조건을 만족하는 레코드를 찾기 위해 몇개의 레코드를 검사해야 하는지(이게 얼마나 가져와서 비교하는지...)
- Extra : 부가적인 정보
    distinct : 조건을 만족하는 레코드를 찾았을 때 같은 조건을 만족하는 또 다른 레코드가 있는지 검사하지 않음.
    not exist : left join 조건을 만족하는 하나의 레코드를 찾았을 때 다른 레코드의 조합은 더 이상 검사하지 않는다.
    range checked for each record : 최적의 인덱스가 없는 차선의 인덱스를 사용한다는 의미.
    using filesort : mysql이 정렬을 빠르게 하기 위해 부가적인 일을 한다.
    using index : select 할때 인덱스 파일만 사용
    using temporary : 임시 테이블을 사용한다. order by 나 group by 할때 주로 사용
    where used : 조건을 사용한다는 의미.

이정도 정보만 있어도 풀스캔을 유발하는 악성쿼리를 분석하는데 도움이 될 것 같고, 적절한 캐쉬전략을 함께 쓰면 더 좋은 성능을 낼 수 있을 것 같다.

관련링크
  http://susukang98.springnote.com/pages/1338000
  http://iamnotokay.tistory.com/141

오라클이면 아마도 Toad나 Orange를 모르는 사람은 없을것이다.
Mysql도 여러가지의 툴이 있는것 같은데 SQLyog 는 무료이면서도 쓸만한 기능들을 많이 가지고 있다.

1. 설치화면(Community edition)


2. 실행화면


3. 프로그램 다운

4. 홈페이지 - http://www.webyog.com/

티스토리 툴바