참조테이블 : test_table

칼럼 : age , hakbun , grade


인덱스 생성

CREATE  INDEX  인덱스_이름  ON 참조테이블  ( 칼럼 )

- CREATE  INDEX  AGE_INDEX  ON  TEST_TABLE  (AGE)


인덱스 삭제

ALTER  TABLE  테이블_이름  DROP  INDEX  인덱스_이름

 - ALTER  TABLE  TEST_TABLE  DROP  INDEX  AGE_INDEX


결합 인덱스 생성

CREATE  INDEX  인덱스_이름  ON 참조테이블  칼럼 ,칼럼 , 칼럼)

- CREATE  INDEX  AGE_INDEX  ON  TEST_TABLE  (AGE ,hakbun , grade )


인덱스를 참조했는지 테스트 하는법

EXPLAIN SELECT 쿼리~~

ex) EXPLAIN SELECT * FROM STUDENT;


각 칼럼의 의미

  • table                사용한 테이블. 조인일 경우는 행이 여러 개로 나온다.
  • type                 가장 중요한 것 중에 하나이며, 조인이 사용되었는지 말해준다.
  •                         가장 좋은 타입부터 가장 나쁜 타입은 system, const, eq-ref, ref, range, index, all 이다.

                            Type에 all이나 index, range 등이 보일 경우는 쿼리가 그다지 빠르지 않다는 것을 의미한다.

     

              system : 테이블이 하나의 레코드만 가지는 경우
              const  : 테이블에 조건을 만족하는 레코드가 하나일 때, 상수 취급
              eq_ref : 인덱스가 UNIQUE이거나 PRIMARY KEY인 경우의 조인으로 const를 제외한 조인 중 가장 좋은 형태
              ref    : eq_ref와 다른 점은 UNIQUE나 PRIMARY KEY가 아닐 경우 사용한다는 것.
              range  : 조건에 레코드의 범위가 주어진 조인.
              index  : all 형태와 비슷하며, 인덱스를 사용한다.
              all    : 모든 레코드를 스캔한다.

     

  • possible_keys    사용 가능한 키(인덱스)
  • key              사용하고 있는 키(인덱스)
  • key_len          키가 사용된 길이. 작을수록 좋다(int는 4바이트, char(10)은 10바이트를 차지한다.
  •                  테이블에서 데이터형의 결정은 되도록이면 int나 smallint, medianint를 사용하는 것이 좋다).

  • ref              칼럼이나 상수(const)가 사용되었는지 말해준다.
  • rows             인덱스 범위를 나타낸다. 작을수록 역시 빠르다.
  • Extra            정보- "using temporary"나 "using filesort"는 가장 좋지 않다.
  •  

              distinct : 조건을 만족하는 레코드를 찾았을 때 같은 조건을 만족하는 또 다른 레코드가 있는지 검사하지 않음.
              not exist : left join 조건을 만족하는 하나의 레코드를 찾았을 때 다른 레코드의 조합은 더 이상 검사하지 않는다.
              range checked for each record : 최적의 인덱스가 없는 차선의 인덱스를 사용한다는 의미.
              using filesort : mysql이 정렬을 빠르게 하기 위해 부가적인 일을 한다.
              unsing index : select 할때 인덱스 파일만 사용
              using temporary : 임시 테이블을 사용한다. order by 나 group by 할때 주로 사용
              where used : 조건을 사용한다는 의미.



    위의 각 칼럼의 의미 [출처] 최적화를 위한 분석(PROCEDURE ANALYSE, EXPLAIN SELECT) |작성자 너만을



    오라클에서는 인덱스를 여러개를 생성하면 전부 사용가능하지만 mysql에선 인덱스를 하나밖에 사용하지 못한다고 합니다. 여러개의 인덱스를 한번에 사용하려면 결합인덱스를 생성하면 사용하실수 있습니다.


    ex)  - CREATE  INDEX  AGE_INDEX  ON  TEST_TABLE  (AGE ,hakbun , grade )  


    SELECT  *  FROM  TEST_TABLE  WHERE AGE = '' AND HAKBUN = '' AND GRADE = ''  

    3개의 조건이 동일시 사용할 경우 인덱스 사용법


    - EXPLAIN 시 Extra 칼럼에 Using Temporary, Using filesort 라는 값이 나타날 경우 느린 결과를 초래하기때문 피해셔야 합니다.

    group by 를 사용할 경우 order by null 추가 생성으로 피할 수 있습니다.

    블로그 이미지

    김진리

    ,

    특정 데이터베이스  DB백업

    ex)  database 이름이 test 이면

    mysql 이 설치된 폴더에서 bin 까지 접근한 후

    mysqldump -u root -p test > 덤프이름.sql    로 생성


    bin 폴더 안에 덤프이름으로 생성됩니다.


    모든 데이터베이스 DB백업

    test , user, compnay 라는 3개의 DB가 존재하면

    mysqldump -u root -p --all-databases > 덤프이름.sql  로 생성

    블로그 이미지

    김진리

    ,

    최초 mysql 을 접속하여 


    use mysql;  후


    insert into user (Host, User, Password, ssl_cipher, x509_issuer, x509_subject ) 

    values('localhost','아이디',password('비밀번호'),'','','');

    flush privileges;


    위 과정을 하면 아이디가 생성이 됩니다.


    이후 select 권한 부여시


    grant select on database.tabe to '아이디'@localhost; 

    flush privileges;

    위 과정을 하면 해당 아이디에 select 권한을 가지게 됩니다.


    블로그 이미지

    김진리

    ,

    칼럼을 전부다 이전할 경우

    insert into 이전테이블이름 select * from 옮겨질테이블이름


    자신이 필요한 칼럼만 이전할 경우

    insert into 이전테이블이름 (필요칼럼1,,필요칼럼2,..) select 필요칼럼1,필요칼럼2,.. from 옮겨질테이블이름



    블로그 이미지

    김진리

    ,

    Mysql db를 풀 덤프해서 새로 설치한 서버에 DB를 Restore 하는 과정중 발생한 에러...

    insert 하는 log쿼리라서.. 용량이 많아 튕긴거라 생각이.. 아래의 블로그에 가면 해결법이 있습니다.!


    http://cowvoice.tistory.com/13

    블로그 이미지

    김진리

    ,

    mysql 에서 테이블의 칼럼 추가 , 삭제, 변경


    테이블 이름 : BILL   , 칼럼명 : age , tall


    -칼럼추가


    ALTER TABLE 테이블명 ADD COLUMN 칼럼명 칼럼명타입

     ex) alter table BILL add column AGE int(11) default '0' 


    -칼럼 삭제


    ALTER TABLE 테이블명 DROP COLUMN 칼럼명

     ex) alter table BILL drop column AGE


    -칼럼 변경


    ALTER TABLE 테이블명 CHANGE COLUMN '기존칼럼명' '새로운칼럼명' 새로운 칼럼타입

     ex) alter table BILL change column 'AGE' 'NAME' int(11) default '0'


    -칼럼에 Primary Key 지정

     ex) alter table BILL add primary key ('age')

    블로그 이미지

    김진리

    ,