티스토리 뷰

DB 속도 개선

1. 쿼리를 잘 분석한 후 꼭 필요한 칼럼만 인덱스로 만들어야 한다.

2. 최대한 작은 칼럼 타입을 선택하라.

3. varchar 보다는 char를 사용하라

(varchar를 사용하면 디스크 사용량을 줄일 수 있는 반면 검색 시 속도가 떨어지게 된다.)

4. enum 칼럼을 사용할 수 있으면 사용하라.

5. not null을 사용하라(not null을 이용하면 속도가 빨라지며 한 칼럼 당 1비트를 줄일 수 있다.)

6. procedure analyse()를 사용하라( 3.23.x 이상의 버전에서 쓸 수 있는 기능으로 해당 칼럼을 어떤 타입으로 정의하면 좋을 지를 보여줍니다.)

-> 예 : select * from zipCode procedure analyse();

7. BLOB 이나 TEXT 칼럼은 다른 테이블로 만들어라.

 

Insert into test_table values (12, 4), (1, 4), (9, 4), (2, 4), (10, 10);

Update 문 빠르게 사용하는 방법

Optimize table

Delete 문 빠르게 사용하는 방법

MySQL의 인덱스 캐시의 양을 크게 하는 게 좋음

Where 절의 최적화

Where절에 쓰이는 컬럼을 인덱스로 만들고, 필요 없는 괄호는 없애야 한다.

 

 

 

 

 

속도 빠른 쿼리 예

 

select count(*) from tbl_name;

select MIN(key_part1), MAX(key_part1) FROM tbl_name;

select MAX(key_part2) from tbl_name where key_part_1=constant;

select … from tbl_name order by key_part1, key_part2, … LIMIT 10;

select … from tbl_name order by key_part1 desc, key_part2 desc, … LIMIT 10;

 

MySQL 서버 최적화 하기

 

방법 1 : MySQL 설치시 컴파일 방법

è     컴파일러를 gcc 대신에 pgcc를 이용하고 –06 옵션을 주어 컴파일하면 MySQL 서버는 약 11% 정도 빨라집니다.

è     -static 옵션을 주면 공유 라이브러리를 사용하지 않게 되어 메모리를 더 쓰지만, 약 13% 정도 빨라집니다.

è     유닉스 소켓을 사용하는 것이 TCP/IP를 사용하는 것보다 빠릅니다.

 

방법 2 : 디스크와 심벌릭 링크

ln –s MySQL-Version-OS mysql

 

방법 3 : 버퍼크기 조정

메모리가 256MB 이상이고 테이블의 수도 많을 때

safe_mysqld –O key_buffer=64M –O table_cache=256 –O sort_buffer=4M –O record_buffer=1M &

메모리가 128MB 정도이고 테이블의 수가 적고 정렬을 많이 사용할 때

$safe_mysqld –O key_buffer=16M –O sort_buffer=1M

메모리가 작고 클라이언트의 연결이 많을 때

safe_mysqld –O key_buffer=512K –O sort_buffer=16K –O table_cache=32 –O record_buffer=8K –O net_buffer=1k&


 

방법 4 : 기타 MySQL을 빠르게 하는 방법

PHP의 경우 mysql_pconnect()라는 함수를 이용해 서버에 연결하라.

Select 문을 쓸 때는 인덱스를 사용하는지 확인하라.

: explain문을 이용하여 현재 사용하고 있는 select가 인덱스를 사용중인지 확인할 수 있다.

칼럼에 Default Value를 사용하라.

UDF를 이용하라.

칼럼에 유일한 값을 저장할 때는 AUTO_INCREMENT를 이용하라.

Select /*! HIGH_PRIORITY */는 select에 우선순위를 주어 select 의 속도를 빠르게 할 수 있다.(다른 클라이언트에서 insert를 하려고 해도 먼저 select를 하므로 select가 빠르다.)

Insert /*! Low_priority */는 select하는 쿼리와 동시에 실행될 때 select를 먼저 하도록 한다.(insert의 속도를 늦추어 결과적으로 select의 속도를 빠르게 합니다.)

정적으로 컴파일 하는 방법

./configure –with-client-ldflags=-all-static –with-mysqld-ldflags=-all-static

 

 

(1) 설치
  설치는 성능을 약 10% 정도 끌어올려준다는 static 모드로 설치하겠습니다.

[root@localhost local]# wget http://ftp.superuser.co.kr/pub/mysql/mysql-4.0.20.tar.gz
[root@localhost local]# tar xvfz mysql-4.0.20.tar.gz
[root@localhost local]# cd mysql-4.0.20
[root@localhost mysql-2.0.20]# CFLAGS="-static -O2 -march=i686 -funroll-loops"
CXXFLAGS="-static -O2 -march=i686 -funroll-loops -felide-constructors -fno-exceptions -fno-rtti"

 ./configure
--prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data
--disable-shared --enable-assembler
--with-thread-safe-client --with-mysqld-user="mysql"
--with-client-ldflags=-all-static
--with-mysqld-ldflags=-all-static

--with-readline --without-debug
--without-docs --without-bench
--with-charset=euc_kr


MySQL 4.1.X 에서는 --with-charset=euckr 으로 해야 합니다.
  위 설정에서 static 모드로 설치하며, 언어는 많이 사용하는 euc_kr로 설치합니다.
 데이터 디렉토리는 /usr/local/mysql/data 에 저장하게 설정합니다.

'데이타베이스 > Mysql' 카테고리의 다른 글

Mysql - 기본 참고사항 (2)  (0) 2008.06.22
Mysql 기본참고 사항  (0) 2008.06.22
Oracle rank 함수 Mysql 사용가능?  (2) 2008.06.22
Mysql explain  (0) 2008.06.22
Mysql 서버 5.0의 신기능  (0) 2008.06.22
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크