http://www.nzeo.com/bbs/zboard.php?id=p_study&page=1&sn1=&divpage=1&sn=off&ss=on&sc=off&select_arrange=hit&desc=desc&no=7

1. MYSQL DB
PHP에서 DB와 연동하기 위해서는 우선 DB에 접근을 해야 합니다.
DB에 접근하기 위해서는 MYSQL DB가 어데 있는지와 자신의 계정 아듸와, 패스워드,
그리고 DB계정 아듸가 필요합니다.
보통 MYSQL DB는 자신의 계정과 같은 곳에 있기 때문에 localhost로 지정하면 되지만 따로 서버를
만들어서 MYSQL DB를 이용하는 경우에는 해당 서버의 IP 주소가 필요합니다.
그럼 실질적으로 하겠습니다.
우선 DB에 접속하기 위한 설정을 변수로 미리 선언해 놓습니다. (이게 편합니다)

$host_name = "localhost";
$user_name = "user";
$user_password = "*****";
$db_name = "test";



즉 Mysql의 DB는 같은 계정에 있다구 하고, $user_name은 자신의 계정 아듸, $user_password는 계정 패스워드, $db_name은 자신에게 할당된 DB의 이름입니다.

그럼 이제 접속을 해야 겠죠.

$connect = mysql_connect($host_name,$user_name,$user_password) or echo"mysql_error()";

mysql_connect()라는 함수가 바로 DB에 접속하는 함수입니다.
mysql_connect() 함수에 $host_name, $user_name, $user_password를 주고 호출을 하게 되면 결과가 나옵니다.
이 결과값은 $connect 안에 넣게 되죠.
뒤에 or echo"mysql_error()"; 은 만약 에러가 발생하면 에러값을 출력하게 하는 구문입니다.
mysql_error()은 에러발생시 에러값을 return 해 주는 기특한 함수입니다.
만약 이상없이 DB에 접속하게 되면 아무 표시도 안나겠죠.
그럼 이제 자신의 DB에 연결해 봅시다.

mysql_select_db($db_name, $connect ) or echo"mysql_error()";

mysql_select_db()에 $db_name 과 $connect를 넣구 호출하면 자신의 DB에 연결이 됩니다.

2. Table 생성

자 그럼 이제 DB에 테이블을 생성해 봅시다.
DB에 테이블을 생성하건, 삭제하건, 아님 수정하건 Query문을 mysql에 건네주게 되어 있습니다.

이름과 나이, 전화번호, 주소만 가지고 있는 테이블을 만들어 봅시다.
$que = "CREATE TABLE Human_info (
                                     id int(11) DEFAULT '0' NOT NULL auto_increment,
                                     name varchar(10),
                                     age int(3),
                                     tel_num varchar(20),
                                     address text,
                                     PRIMARY KEY (id))";

위와 같은 Query문을 만들었습니다.
Query문을 만들 때는 문자열 변수에 내용을 입력하면 됩니다.
위에 것은 보기 좋으라고 줄을 나누었는데 이러기 싫은 한줄로 쫘악 해도 됩니다.

생성하는 Query문은 "CREAT TABLE 테이블명 ( 필드명과 Type )" 로 합니다.
즉 위에서 테이블명은 Human_Info가 되죠.
그리고 id, name, age, tel_num, address 같은 넘은 바로 스키마 이름이 되는 것이고, 그 옆에 int(11),
varchar(10), text 같은 것은 Type이 되는거죠.
그런데 사용할 스키마와는 별도로 id 라는 스키마를 지정했죠?
ID는 테이블에 데이터를 넣고 뺄 때 필요한 일련번호입니다.
DEFAULT '0' 은 첨에는 0부터 시작한다는 거죠.
NOT_NULL 은 절대 빈칸은 허용 안되다는 거죠. 어떤 넘이라도 일련번호를 붙여야 된다는 거죠.
auto_increment 는 별다른 값을 안 주어도 자동으로 증가하라는 겁니다.
그리고 밑에 PRIMARY KEY (id)를 씀으로서 기본키는 ID라는 것을 지정하는 겁니다.

그럼 위에 쓰인 Type에 대해서 이야기 하죠.
int(11)은 11자리의 정수형 타입닙니다.
varchar(20)은 20칸짜리 문자열이라는 거구요.
text는 개행문자를 포함하는 끝을 모르는(?) 문자열이라는 겁니다.
Type은 보통 위에 3가지만 쓰면 별 이상없을 겁니다.
다른 Type들은 별로 쓰이지는 않으니 필요할때마다 찾아서 하시면 됩니다.
자 그럼 이 $que 라는 질의어를 mysql에 전달합시다.

mysql_query( $que, $connect ) or echo"mysql_error()";

mysql_query() 라는 함수가 바로 질의어를 넘겨주는 함수입니다.
물론 생성할 때뿐만 아니라 질의어를 넘겨줄 때 이 함수를 쓰는 겁니다.

이렇게 하면 자신의 DB에는 id, name, age, tel_num, address를 필드로 하는 테이블이 생성된겁니다.

3. Table에 자료 추가

자 이제, 테이블을 생성했으니 자료를 추가해봅시다.
지금은 테이블만 만들어져있기 때문에 자료가 하나도 없습니다.
자료를 Insert할 때는 필드의 순서대로 입력을 해야 합니다.
우선 Query 문을 작성해 봅시다.

$que = "INSERT INTO Humna_info VALUES (
                           '',
                           '아무개',
                           24,
                           '000-000-0000',
                           '아무시
                           아무구 아무동'
                           )";

위의 "INSERT INTO 테이블명 VALUES (데이타...)" 라구 하는 것이 자료추가하는 질의어입니다.
VALUES ( 다음에 보면 처음에 '' 라고 되어 있죠?
이넘이 바로 id입니다. 즉 인위로 값을 넣지 않죠.
하지만 위에서 정의한 대로 auto_increment 이기 때문에 저절루 순서가 매겨집니다.
그리고 2번째 이름은 문자열 이기 때문에 '로 둘러싼 것 입니다. (" 쓰면 안됩니다.)
그리고 3번째 나이는 정수형이기 때문에 ' 가 필요없습니다.
이 질의어를 mysql_query를 통해서 MySQL에 일을 냅따 시킵시다.

mysql_query( $que, $connect ) or echo"mysql_error()";

그럼 이제 Human_Info라는 테이블에는 id 값이 0인 첫 번째 값이 들어간거죠.

4. Table의 자료 제거
이제 만들어 봤으니 제거 하는 방법을 알아 봅시다.
제거하는 방법은 추가하는 것보다 더 쉽습니다.

$que = "delete from Human_info where id=0";
mysql_query( $que, $connect );

delete from 테이블명 where 조건문 하면 됩니다. 그러고 $que를 MySQL에 넘겨주면 지웁니다.

위이 예에서는 Human_Info라는 테이블에서 id값이 0인 넘을 지우라는 거죠.
where id=0 했으니깐요.
만약 where age=20 하면 Human_info 테이블에서 age=20 인넘들은 모두 지우죠.

5. Table의 자료 수정
자료의 수정방법도 매우 쉽습니다.

$que = "UPDATE Human_Info SET name='막둥이' WHERE id=0";
mysql_query( $que, $connect );

수정할 때는 "UPDATE 테이블명 SET 수정할넘=수정할값 WHERE 조건문" 하믄 됩니다.

콤마(,)를 이용해서 여러개를 바꿀수 있습니다.

6. Table의 자료 출력

자 이제 만들고, 지우고, 수정하는 걸 알았으니 원하는 자료를 테이블에서 불러오는 방법을 해봅시다.

$que = "SELECT * FROM Human_Info";
$data = mysql_query( $que, $connect );

바로 SELECT, FROM을 이용해서 가져옵니다.
* 는 모든 것을 가져오라는 겁니다.
만약 name만 필요하다면 SELECT name FROM Human_Info 라구 하면 되고요.
name과 age가 필요하면 SELECT name, age FROM Human_Info 라고 하면 되죠.

Query문을 mysql_query를 통해서 MYSQL에 전달하면 mysql_query() 함수는 찾은 결과를 return 하게 됩니다.
위에서는 $data라는 변수에 결과값을 저장하였죠.
그럼 $data 변수안에는 찾은 결과가 배열의 형태로 입력되어져 있습니다.
그럼 우선 몇 개가 찾아졌는지 함 알아봅시다.

$total = mysql_affected_rows();

위와 같이 하면 총 몇 개가 찾아졌는지 알수 있습니다.
mysql_affected_rows() 이라는 함수는 찾아진 값의 갯수를 return 합니다.

자 그럼 이제 $data안에 있는 내용을 출력하기로 해봅시다.

출력하기 위해서는 mysql_data_seek($data,$i) 라는 함수를 알아야 합니다.

mysql_data_seek()는 $data 파일에서 $i 번째의 데이터를 지정시켜 놓는 함수입니다.

즉 mysql_data_seek($data,0) 이라고 하면 찾아진 결과의 첫 번째 데이타를 지정해 놓는 거죠.

지정을 했으면 다음과 같은 방법으로 값을 가져옵니다.

$human = mysql_fetch_array( $data );

mysql_fetch_array()는 $data에서 지정된 넘의 값을 배열로 return 합니다.
즉 $human[id], $human[name], $human[age], $human[tel_num], $human[address] 가 되는거죠.

출력할 때는 echo"이름 : $human[name], 나이 : $human[age]살"로 하면 되죠.

이름 : 아무개, 나이 : 20살

위에 처럼 출력 되겠죠.

그럼 리스트처럼 주르륵 하기 위해서는 for문을 사용하면 됩니다.

for($i = 0; $i < $total; $i++)
{
mysql_data_seek($data,$i);
$human = mysql_fetch_array( $data );
echo"이름 : $human[name], 나이 : $human[age]살
";
}

위와 같이 하면 주르륵 나오겠죠?

쉽죠?

그럼 select 문에 대해서 몇가지만 더 적겠습니다.

$que = "SELECT * FROM 테이블명 order by id";

위에 처럼 하면 order by id 라는 구문 때문에 id의 정렬순으로 결과가 나옵니다.

만약 역순으로 할려면 order by id desc 라고 하면 되지요.

그리고 limit 숫자 하면 숫자만큼의 갯수만 나옵니다.
$que = "SELECT * FROM 테이블명 order by id limit 10";
위에 처럼 하면 10개만 나오죠.

만약 검색처럼 어떤 문자열을 포함하고 있는 넘을 찾을 때는 다음과 같이 하면 됩니다.
이름에 "김"이 포함된 넘을 찾는 다고 합시다.
$que = "SELECT * FROM 테이블명 WHERE name LIKE '%김%'";
위에서 WHERE라는 넘은 아까도 나왔지만 조건을 붙일 때 쓰는 넘입니다.
그리고 LIKE '%검색문자%' 라구 덧 붙이면 name 필드중 "김" 이라는 문자가 있는 넘을 찾아라는 겁니다.


1) DB가 있는 서버에 연결한다. 여기서 $connect 값이 생기고  

2)연결된 서버에 있는 DB중 원하는 DB를 찜한다. 찜하면 새로 찜하기 전에는 계속 이 DB만 갖고 놀게 된다.

 1)은 mysql_connect() 로 하고 2)는 mysql_select_db() 로 한다.  

 3) 여기서 부터는 sql 문법이 승부를 가른다. 만들고, 지우고, 고치고, 덧붙이고
   ..위에는 create table (만들고) delete(지우고)   ..그리고 update (고치고), update (있는데다 덧붙이고)

 4) 이 글의 하일라이트는 일단 만들어진 내용을 가져오는건데..
 ...mysql_query() 에 'select'로 data를 불러와서 $data에 넣어두고
 ...mysql_data_seek() 이건 $data 중에 뽑아올 id를 지정하고
 ...mysql_fetch_array() 를 사용해야 비로소 위의 1)~3)으로 만든 데이터베이스에서  
 데이터를 뽑아 올수 있다.

'SQL > MySQL' 카테고리의 다른 글

Mysql 자동 백업 하기 - Rsync와 연계하면 좋음  (0) 2007.03.16
MySQL backup  (0) 2007.03.15
GRANT 문으로 사용자 추가및 권한부여  (0) 2007.03.15
MySQL 튜닝에 관하여  (0) 2007.03.15
MySQL 설치후 가장먼저 해야할일  (1) 2007.03.15
Posted by efrit
,
http://dnavi.info/info/79

/root아래에 backup.sh 이라는 파일을 만들어 놓고 백업 명령어를 다음과 같이 주었다.

#!/bin/bash
/usr/local/mysql/bin/mysqldump -uroot -p***** mysql > mysql_db_bak_$(date +%Y%m%d).sql
/usr/local/mysql/bin/mysqldump -uyanemone -p***** yanemone > yanemone_db_bak_$(date +%Y%m%d).sql
mv *.sql /backup
tar cvfpz /backup/html_bak.tar.gz /var/www/html
tar cvfpz /backup/yanemone_html_bak.tar.gz /home/yanemone/public_html
tar cvfpz /backup/dichang_html_bak.tar.gz /home/dichang/public_html

WEEKAGO=`date -d "-30 days" +%Y%m%d`

rm -f /backup/*${WEEKAGO}.sql

귀찮으니까 한달 지난건 지워버리죠.

백업할 내용이라던지 파일 이름은 자신의 상황에 맞게 주면 되겠다.

이렇게 하고 나면 backup.sh파일을 chmod 100 backup.sh로 단단히 무장하라.

그리고 crontab -e 명령으로 cron 작업을 명시하자
그럼 vi가 열리면서 편집이 가능하다

00 06 * * * /root/backup.sh

그리고 /var/spool/cron/root가 있는지 확인해보자. 있다면 정상적으로 수행할 것이다.

Crontab 의 메일 안받기
/etc/crontab이라는 파일을 열어보자
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=ROOT
HOME=/

부분이 있다. MAILTO=ROOT를 다음과 같이 고쳐보자
MAILTO=""

크론에 등록시 아래와 같이 하면 메일이 날아오지 않는다.
위에꺼는 전체 메일이 다 날아오지 않으므로 주의 해야 한다.
그러므로 아래꺼 사용하믄 된당...
00 06 * * * /root/backup.sh >/dev/null 2>&1

저장할 파일의 크기가 클경우 분할하여 압축할수 있다.
백업을 하다보면 기가단위가 넘을때가 많습니다.
그때는 분할백업(CD 1장 단위가 좋겠죠...)
tar -zcvpf - /압축할dir | split -b 670mb - 압축파일.tar.gz
그러면 압축파일.tar.gzaa
압축파일.tar.gzab순으로 파일이 생깁니다.

-b 670mb는 압축파일을 670mb단위로 분할 하라는 옵션입니다.

압축풀라고 할때는 (쿠쿠 바로 답해 주셔서 캄솨함다.)
cat test.tar.gza* > test.tar.gz
로 하여 tar.gz파일로 만들어서 풀면 된다.

'SQL > MySQL' 카테고리의 다른 글

MYSQL Query의 간단한 사용법  (0) 2007.03.16
MySQL backup  (0) 2007.03.15
GRANT 문으로 사용자 추가및 권한부여  (0) 2007.03.15
MySQL 튜닝에 관하여  (0) 2007.03.15
MySQL 설치후 가장먼저 해야할일  (1) 2007.03.15
Posted by efrit
,

MySQL backup

SQL/MySQL 2007. 3. 15. 22:06
$ mysqldump -u root -p secret stocksdb                      => stocksdb 데이타베이스 덤프

$ mysqldump -u root -p secret stocksdb > stocksdb.sql       => 덤프를 파일로 저장

$ mysqldump -u root -p secret stocksdb users > users.sql     => 특정 테이블(users) 만 덤프

$ mysqldump -u root -p secret --all-databases > backup.sql     => 모든 데이타베이스 덤프

$ mysqldump -u root -p secret --no-data stocksdb > stocksdb.sql      => 테이블구조만 덤프

$ mysqldump -u root -p secret --no-create-info stocksdb > stocksdb.sql     => 데이타만 덤프



복구

$ mysql -u root -p secret < backup.sql                => 모든 놈 복구시

$ mysql -u root -p secret -D stocks2 < stocksdb.sql    => 일부 테이블이나 데이타베이스 복구시


포맷팅

$ mysqldump -u root -p secret --no-create-info --fields-terminated-by=',' stocksdb      => sql 포맷 대신에 CSV 포맷으로

$ mysqlimport -u root -p secret --fields-terminated-by='\t' test /tmp/portfolio.txt     => 읽는건 mysqlimport 로
Posted by efrit
,
새로운 사용자 추가하기

새로운 사용자를 추가하는 방법에는 다음과 같이 2가지 방법이 있다.

① GRANT 문을 이용하여 새로운 사용자 추가

CREATE DATABASE {DB명};
GRANT ALL [PRIVILEGES] ON {DB명}.* TO {ID}@localhost IDETIFIED BY '1234' [WITH GRANT OPTION];
GRANT ALL [PRIVILEGES] ON {DB명}.* TO {ID}@'%' IDENTIFIED BY '1234' [WITH GRANT OPTION];
FLUSH PRIVILEGES;

② INSERT 문을 이용하여 user 테이블에 새로운 사용자 추가

mysql> GRANT ALL PRIVILEGES ON *.* TO 사용자ID@localhost IDENTIFIED BY '사용할 패스워드' WITH GRANT OPTION;
mysql>

=>*.*은 모든 데이터를 사용할 수 있는 권한

ex) GRANT 문을 이용하여 blueji78 이라는 새로운 사용자를 추가해보자.
root 로 접속한뒤~

mysql>GRANT ALL PRIVILEGES ON *.* TO blueji78@localhost IDENTIFIED BY '1234' WITH GRANT OPTION;
mysql>

=>root를 제외하고 일반 사용자에게 하나의 데이터베이스에 접근 할 수 있는 권한.
=>위예제는 모든권한을 주는 명령이기때문에 일반사용자가 잘못 사용시 문제가 발생할 수 있다.

ex) blueji78 사용자에게  1234 라는 암호로 naver 라는 데이터베이스에 접근해서 사용하도록 권한을 바꾸기

mysql>GRANT ALL PRIVILEGES ON naver.* TO blueji78@localhost IDENTIFIED BY '1234' WITH GRANT OPTION;
mysql>GRANT ALL ON naver.* TO blueji78;

=>naver 라는 데이터베이스를 blueji78 사용자에게 권한을 줍니다.

'SQL > MySQL' 카테고리의 다른 글

Mysql 자동 백업 하기 - Rsync와 연계하면 좋음  (0) 2007.03.16
MySQL backup  (0) 2007.03.15
MySQL 튜닝에 관하여  (0) 2007.03.15
MySQL 설치후 가장먼저 해야할일  (1) 2007.03.15
MySQL 의 root 사용자 암호 바꾸기  (0) 2007.03.15
Posted by efrit
,
1.반드시 컴파일 하라! 10-30% 속도 향상 !

  소스를 가지고 컴파일 하세요. MySQL 메뉴얼에 따르면 10-30% 속도가 빠르다고 합니다.  
  RPM 이나 바이너리 설치를 하지 마세요 !


1-2.최신 버전을 사용하라

  최신 버전이 좋은 점은 자동 튜닝 하는 것 입니다.
  버그를 수정 하구요. 되도록 이면 최신 버전을 사용하세요 !!
  현재 3.23.49 입니다.


2. HEAP 테이블이 가장 빠르다!

  일반적으로 가장 많이 쓰이는 테이블 타입은 MyISAM 타입 입니다.
  MyISAM 타입은 무자게 빠르며, 대용량에도 강합니다. 그러나 트랜잭션은 지원되지 않습니다.
  이노디비(InnoDB) 는 트랜잭션이 지원 됩니다. 쇼핑몰에서는 반드시 사용해야 합니다 ^^

  HEAP 테이블 타입은 가장 빠르며, 단점은 메모리에 있기 때문에, MySQL에 중지 될 경우 모두 날아 갑니다.
  검색을 하고 재검색을 다시 하는 경우, 임시 검색 테이블을 만들어 놓는 것도 좋은 방법입니다.

  HEAP 테이블 메뉴얼 !
  http://www.mysql.com/doc/H/E/HEAP.html

  HEAP 테이블 만들기 !
  mysql>CREATE TABLE email_addresses TYPE=HEAP (
      ->email char(55) NOT NULL,
      ->name char(30) NOT NULL,
      ->PRIMARY KEY(email) );


3.mysql 서버 top 보기

  mysql  서버의 메모리 상황을 보여 주는 프로그램 입니다.
  리눅스나 유닉스의 top 기능을 mysql 에서 가능하게 한것 입니다.

  top 정보는 튜닝의 기본 이기 땜시 자주 자주 보아야 합니다. ^^
  http://public.yahoo.com/~jzawodn/mytop/

  PHP 소스 자료실에 파일 다운 로드 하시면 됩니다.


4.mysql_connect Vs mysql_pconnect

  서버 메모리가 최소 2G 이상일 경우 mysql_pconnect 를 추천 함다 !
  연결을 계속 하지 않기 땜시 빠릅니다. !

  그러나 메모리가 2G 이하 일 경우는 mysql_connect 사용하세요 !


5.int,smallint,tinyint 데이터형 !  

  int 는 굉장히 큰수 입니다. 4바이트를 차지 하구요.
  tinyint 는 몇백 까지만 됩니다. 1바이트 구요.

  쓸데 없이 int 를 사용하지 마세용 !!
  4바이트와 1바이트는 4배 차이 입니다.조그만것 1개 1개가 모여 서버 부하를 일으 킵니다.!!

  데이터 량이 얼마만큼 들어가는지 체크 하고 데이터형을 선택 하세요 ^^
  만약 쓸데없는 데이터 형이다 싶으면 alter table 로 데이터 형을 바꾸세요 !


6.인덱스의 사용  

  인덱스는 반드시 필요한 곳에만 넣으세요 !
  인덱스를 줄 경우 하드 용량을 더 차지 하기 때문에 속도를 떨어 뜨릴 수 있습니다.

  모든 칼럼에 인덱스를 주는 것은 절대 추천 하지 않습니다.
  1개의 테이블에 주키외에 2-3 개 이상의 인덱스는 주지 마세요!

  주키는 당근 인덱스 입니다. ^^

  CREATE TABLE albums (
      id        INTEGER      NOT NULL AUTO_INCREMENT PRIMARY KEY,
      title     VARCHAR(80)NOT NULL,
   
      INDEX title_idx (title)
  );

  ☞Alter Table 로 인덱스 추가
  ALTER TABLE albums ADD INDEX title_idx (title)  

  결합 인덱스의 경우 너무 많은 인덱스를 사용할 경우 CPU 오버헤드나 하드 오버헤드를 불러 일으 킵니다.
  적당히 사용하세요 ^^

  http://www.mysql.com/doc/I/n/Indexes.html
  http://www.mysql.com/doc/M/u/Multiple-column_indexes.html
  http://www.mysql.com/doc/O/R/ORDER_BY_optimisation.html


6-1. 바보 같은 인덱스의 사용 ?  

  인덱스는 %$search% 가 먹지 않습니다.
  그런디 게시판 제목(Subject) 에 인덱스 걸어 놓고 , 검색을 %$search% 이렇게 하면 될까요?
  인덱스 거나 안거나 똑같습니다. !!

  $search% 이렇게 사용하세요. 그런디.. $search%  사용하면 제목 처음 단어 밖에 검색이 안됩니다.
  그렇다면 ? 다른 검색 방법은 ?


7.UDF의 사용  

  MySQL은 스토어드 프로시져 같은 개념이 존재 하지 않습니다.
  그대신 C 언어로 만든 함수를 사용할 수 있습니다.

  조금더 빠른 쿼리를 원한다면 UDF 를 사용해보세요 !

  UDF 함수 보기  
  http://empyrean.lib.ndsu.nodak.edu/~nem/mysql/udf/

  http://www.mysql.com/doc/A/d/Adding_functions.html

  스토어드 프로시져가 먼뎅?
  스토어드 프로시져는 쉽게 말해 MS-SQL 함수 입니다.
  오라클에도 아마 있을검당..^^

  그러니까 게시판에서 내용을 넘길때나 불러 올때
  mysql 쿼리가 3-4 번 정도 이루어 집니다. 또는 ms- sql 쿼리가 이루어지죵..
  3-4 번 정도 쿼리가 되면..그만큼 디비 접속이 잦아 지기 때문에..
  속도가 느려 집니다.

  많게는 10번 정도의 insert into 와 update 가 이루어집니다.

  그래서 ms - sql 자체 내에 인서트 함수 나 목록 보기 함수를 만들어 놓습니다.
  글구 1번의 ms-sql 접속만 해서 인서트 함수를 불러서 처리하는 것입니다.

  그렇기 때문에 2-3 번의 쿼리가 절약 되서 빠르다는 것이죵..ㅋㅋㅋ
  또는 10번의 쿼리 할것을 MS-SQL 스토어드 프로시져를 1번만 호출 함으로 해서 디비 접속이 절약이 되죵..ㅌㅌ


  UDF 를 꼭 사용해야 하는가?

  안해도 됩니다.만... 사용하면 좋은점 많습니다. 새로운 함수를 추가 할 수 있으므로 ^^
  MS-SQL의 스토어드 프로시져 기능 비스므리 하게 사용할 수 도 있구요...

  UDF 나 MS-SQL 스토어드 프로시져의 사용법을 익히기 보다는 캐슁을 연구하세용 ^^
  동적인 PHP 를 정적인 HTML 로 만드는 방법을요...
  또는 UDF 에서 MS-SQL 스토어드 프로시져 처럼 사용이 가능 합니다. 그 부분을 연구하세요.

  www.zdnet.co.kr 이나 www.zdnet.com 가시면 기사 파일이 1000,29920,2892.html 파일 이란것을 보게 됩니다.
  어키 구현된것일까요? zdnet 게네 들은 강좌를 원래 부터 HTML 로 만들어서 올리는 것일까용??
  HTML 로 만드는 부분도 많이 생각 해야 합니다. 강좌가 1만개 라면, 1만개의 파일이 생성 됩니다.
  zdnet 의 경우는 조회수가 10만-20만을 넘는 초대형 사이트 이기 때문에 HTML 로 만드는 것이 퍼포먼스가 좋습니다.

  UDF 배워 두면..남주지 않습니다.


8.조인보다는 쿼리를 나누어라!  

  조인(Join)하는 것보다 쿼리를 2개로 나누는 것이 속도가 빠릅니다.
  조인을 생각 하기 이전에 쿼리를 나누는 것을 생각 하세요 ^^

  어쩔 수 없는 경우는 당근 조인 해야죠.

  글고 서브쿼리는 아직 지원 안됩니다.
  Ms-SQL이나 오라클에서 서브쿼리 보다는 서브쿼리를 하지 않는 방향의 데이터 정규화를 하세요 ^^

  조인 보다 서브쿼리가 느리다.
  서브 쿼리 보다는 조인을 사용하세요 ^^


9.full text index와 search  

  3.23.23 부터 mysql 에서는 full text index 를 지원 합니다.   자세한 사항은 아래 !

  http://www.mysql.com/documentation/mysql/bychapter/manual_Reference.html#Fulltext_Search
  http://www.mysql.com/doc/F/u/Fulltext_Fine-tuning.html


10. SELECT * FROM sometable

  SELECT * FROM sometable 에서 * 모든을 사용하는 것은 무식한 방법 입니다.
  모든 칼럼을 불러오는 경우는 드물거든요.

  SELECT code,tadate,see FROM sometable

  사용할 것만 불러 오세요 ^^


11.데이터베이스 정규화  

  테이블을 아무렇게나 만들면 안됩니다.
  데이터베이스 정규화 원칙에 의거, 테이블을 나눌것은 나누고 만드시는 것이 좋습니다.
  제1 정규화, 제2 정규화 정도는 사용하셔야 합니다.

  게시판을 만들때 아직도 테이블 1개에 만드시나요?
  온라인 폴 만들때 , 테이블 1개에 만드시나요?


12.REPLACE INTO문 사용하기

  REPLACE INTO albums VALUES (6, 'tood.net')    
  insert 문대신에 replace 문을 사용해보세요.
  메뉴얼 보시고 연구하세요 ^^

  주키일 경우 사용하시면 됩니다.



13. explain 사용하기  

  explain 를 사용하여 테이블의 키 값이 얼마나 잘 활용 되는지 알 수 있습니다.
  EXPLAIN SELECT, SHOW VARIABLES, SHOW STATUS, SHOW PROCESSLIST

  http://www.mysql.com/doc/E/X/EXPLAIN.html


17.BLOB과 TEXT는 분리하라

  BLOB과 TEXT 칼럼은 테이블을 분리 하는 것이 좋다. 다른 칼럼의 내용 보다 크기 때문이다 !

  OPTIMIZE TABLE 명령을 자주 사용해라 !
  Not null 로 지정 하는 것이 빠르다.
  varchar 보다 char 이 훨빠르다.


참고: 게시판의 특성  

  일반 게시판들 보세요. 여기 질문 게시판 만 봐도 알 수 있구요.

  읽기(select) 가 무자게 많습니다. 쓰기(insert into) 보다 30-40 배 정도 많죠.
  하룻동안 올라온 글이 30 개 라면, 하룻동안 글읽기 조회수 총 합은 최소 100 에서 900 까지 갑니다.
  물론 더 엄청날 수 있구요.

  그렇기 때문에 게시판 목록 보기와 글읽기는 HTML 파일로 만들어 놓는 것이 좋습니다.
  또는 MySQL 에서 튜닝 시에 insert 보다는 select 가 빨리 되도록 튜닝 하는 것이 좋구요 ^^


  [참고사이트]
  http://www.mysql.com/documentation/mysql/bychapter/manual_Table_types.html#SEC457
  http://www.mysql.com/documentation/mysql/bychapter/manual_Reference.html#Fulltext_Search  

  from:
  http://www.javasun.net/board/Bread.jsp?CMD=400000&lnum=19&linenum=15&maxnum=0&keykind=null&keyword=&total=0&NCNT=1&ACMD=10&BCODE=001723  
Posted by efrit
,