Program2.0

테이블을 빠르고 작게 배열하는 방법 (테이블 최적화)

Posted by: spaceufo on: August 8, 2008

  • 가능한한 NOT NULL로 컬럼을 선언한다.
    속도가 빨라지며 각 컬럼마다 1 비트를 절약할 수 있다.
  • default 값을 가질 때 유리하다. 입력되는 값이 기본값과 다를 때만 확실하게 값이 입력된다.
    INSERT 문에서 첫번째 TIMESTAMP 컬럼이나 AUTO-INCREAMENT 컬럼의 값을 입력할 필요가 없다.[mysql_insert_id()] 참고.
  • 가능한한 테이블을 작게 만드려면 더 작은 integer 타입을 사용하자.
    예를 들면 MEDIUM INT 가 보통 INT 보다 좋다.
  • 가변 길이 컬럼이 없다면(VARCHAR, TEXT or BLOB columns), 고정 길이 레코드 포맷이 사용된다.
    이 경우 속도는 더 빠르지만 불행히도(흑흑~) 낭비되는 공간이 더 많다. [Row format] 참고.
  • mysql이 질의를 효과적으로 최적화하기 위해 많은 양의 데이터를 입력한후 isamchk –analyze를 실행하자.
    이렇게 하면 동일한 값을 가진 줄의 평균 숫자를 가리키는 각 인덱스의 값을 업데이트한다. (물론 unique 인덱스에서는 항상 1이다)
  • 인덱스와 인덱스에 따른 데이타를 정열하려면 isamchk –sort-index –sort-records=1 을 사용하자.
    인덱스에 따라 정렬된 모든 레코드를 읽기 위해 unique 인덱스를 가졌다면 이렇게 하는 것이 속도를 빠르게 하는 가장 좋은 방법이다.
  • INSERT 문에서 가능한 다중 값 목록을 사용하자.
    개별적인 SELECT 문보다 훨씬 빠르다. 데이타를 테이블에 입력할 때 LOAD DATA INFILE을 사용하자. 많은 INSERT 문을 사용하는 것보다 보통 20배 빠르다. [Load] 참고.
  • 많은 인덱스를 가진 테이블에 데이타를 입력할때 다음의 과정을 사용하면 속도를 향상시킬 수 있다.
    1. mysql이나 Perl 에서 CREATE TABLE로 테이블을 만든다.
    2. mysqladmin flush-tables 실행. (** 열린 테이블을 모두 닫음 **)
    3. isamchk –keys-used=0 /path/to/db/tbl_name 사용. 테이블에서 모든 인덱스 사용을 제거한다.
    4. LOAD DATA INFILE 를 이용 테이블에 데이타를 입력.
    5. pack_isam을 가지고 있고 테이블을 압축하기 원하면 pack_isam을 실행.
    6. isamchk -r -q /path/to/db/tbl_name 를 이용 인덱스를 다시 생성.
    7. mysqladmin flush-tables 실행.
  • LODA DATA INFILE 과 INSERT 문에서 더 빠른 속도를 내려면 키 버퍼를 증가시킨다.
    mysqld나 safe_mysqld에서 -O key_buffer=# 옵션을 사용하면 된다.
    예를 들어 16M는 풍부한 램을 가졌다면 훌륭한 값이다.
  • 다른 프로그램을 사용하여 데이타를 텍스트 파일로 덤프할때 SELECT … INTO OUTFILE을 사용하자.
  • 연속으로 다량의 insert와 update를 할 때 LOCK TABLE을 사용하여 테이블에 락을 걸면 속도를 향상시킬 수 있다.
    LOAD DATA INFILE 그리고 SELECT …INTO OUTFILE는 원자적이기 때문에 LOCK TABLE을 사용하면 안된다.

테이블이 얼마나 단편화되었는지 점검하려면 ‘.ISM’ 파일에서 isamchk -evi 를 실행한다.

Leave a Reply

Spaceufo’s Twitter

Social code

Site Meter
Join My Community at MyBloglog!Add to Technorati Favoritesfree web stats Blog Ratings
My BlogCatalog BlogRank
마가린 바르기 bookmarkr.net metags WZD.com 네이버에 북마크 다음에 북마크 HanRSS에 북마크하기 이올린에 북마크하기 Pumfit에 글 올리기 del.icio.us에 북마크하기
Bookmark and Share