레이블이 MySQL인 게시물을 표시합니다. 모든 게시물 표시
레이블이 MySQL인 게시물을 표시합니다. 모든 게시물 표시

목요일, 2월 14, 2013

ALTER 문법을 이용한 character set

Posted at 2008/08/25


Database 변환
alter database database_name default character set euckr collate euckr_korean_ci


Table 변환
alter table table_name default character set euckr collate euckr_korean_ci

월요일, 1월 07, 2013

MySQL에서 LIMIT 속도 저하 피하기



출처: 아이군의 블로그


위의 블로그에서 LIMIT에 대해서 이해하기 쉽게 설명해 놓으셔서
스리슬적~ :)


Query 1.
SELECT * FROM TABLE LIMIT 10000000, 50000;
(Table에서 천만개 데이터 이후의 5만개 데이터를 가져오는 쿼리)

Query 2.
SELECT * FROM TABLE WHERE id > 10000000 LIMIT 50000;
(Table에서 id가 천만번보다 큰 행으로 이동 한 후 5만개를 가져오는 쿼리)

Query 1과 Query 2의 차이점은 index를 사용하는 것과 하지 않는 것!!
(query 문 앞에 explain을 추가하여 실행시키면 확인 할 수 있습니다.)

그래서 처리 속도에서 엄청난 차이가 났다는 것입죠
LIMIT를 사용하더라도 영리하게 사용하자는 내용이었습니다. :)

MySQL 안다뤄본지 오래돼서..... ;;

수요일, 11월 14, 2012

MySQL에세 제공하는 스토리지 엔진


Posted at 2009/07/14


출처: afeleia

MySQL 스토리지 엔진에 대해서 좋은 글이 있어서 포스팅~ ^^;; ㅎㅎ
-생명공학으로 학부와 석사를 마쳤는데.. 왜.. MySQL을.. ㅋㅋ

현재 자신이 사용하는 스토리지 엔진을 확인하는 방법

mysql> show table status;
혹은
Information_schema 테이블 확인 (5.0이상부터 지원)


1. MyISAM
MySQL의 기본 스토리지 엔지으로 데이터 저장에 실제적인 제한이 없고 매우 효율적으로 저장한다. Full-Text 인덱스를 지원하며 특정 인덱스에 대해 메모리 캐쉬를 지원한다. 트랜잭션은 미지원/ 테이블 레벨의 락을 지원 잦은 변경및 삭제에는 좋은 성능이 나오지 못하나 데드락 발생은 예방

2. InnoDB
ACID 트랜잭션을 지원하며, MyISAM보다 데이터 저장비율이 낮고, 데이터 로드 속도가 느리다. 특정 데이터와 인덱스에 대해서 메모리 캐쉬를 지원하며 외부티를 지원한다. 데이터 압축이 불가능하고 자동 에러 복구 기능이 있다. 테이블 레벨이 아닌 ROW 레벨의 락을 지원한다.

3. Cluster (NDB)
트랜잭션을 지원하고 모든 데이터와 인덱스가 메모리에 존재하여 매우 빠른 데이터 로드 속도를 자랑하며 PK 사용시 최상의 속도를 나타낸다.

4. Archive
MySQL 5.0부터 새롭게 도입된 엔진으로 자동적으로 데이터 압축을 지원하며 다른 엔진에 비해 80% 저장공간 절약 효과를 자랑한다. 그리고 가장 빠른 데이터 로드 속도 또한 자랑하지만, INSERT와 SELECT만이 가능하다.

5. Federated
MySQL 5.0부터 새롭게 도입된 엔진으로 물리적 데이터베이스에 대한 논리적 데이터베이스를 생성하여 원격 데이터를 컨트롤 할 수 있다. 실행속도는 네트워크 요소에 따라 좌우되면 테이블 정의를 통한 SSL 보안 처리를 한다. 분산 데이터베이스 환경에 사용한다.

Convert a InnoDB table to MyISAM


Posted at 2008/08/25



기본 셋팅으로 테이블을 만들경우

InnoDB로 테이블 생성

InnoDB는 성능보다는 무결점(?)을 우선으로 하기때문에

성능이 MyISAM 타입보다 현저히 떨어진다고 합니다. ㅎㅎ


기존에 InnoDB를 MyISAM으로 바꿔주는 쿼리문.


ALTER TABLE tablename ENGINE = MyISAM;

Delete Command

Posted at 2008/08/25


DELETE

delete from table_name
해당 table의 내용을 삭제

ALTER
alter table table_name {change|add|drop} col_name col_name contents
table의 해당 컬럼을 변환하거나, 추가하거나, 삭제

MySQL UTF-8 셋팅


Posted at 2009/04/23

테스트 환경 Fedora 10 기본으로 깔리는 MySQL 5.0.77

참고 사이트
http://blog.artworker.biz/335
http://towis.net/2689923

vi /etc/my.cnf  [기본으로 설치되는 mysql의 경우]
-존재하는 섹션이 있고 존재하지 않는 섹션이 있다
 섹션이 없으면 추가하면된다.

[client]
default-character-set = utf8

[mysqld]
..생략..
default-character-set = utf8
default-collation=utf8_general_ci
init_connect=set collation_connection = utf8_general_ci
init_connect=set names utf8
character-set-server=utf8
collation-server=utf8_general_ci
character-set-client-handshake=TRUE
..생략..

[mysql]
default-character-set=utf8


파란색으로 Bold처리한 글씨는 새롭게 추가
나머지는 기존에 있는 것이었슴(Fedora 10, mysql 5.0.77의 경우)
-각 값들이 무엇을 하는 것들인지는 저도 잘..

환경 변수 수정 후 mysql 재시작
> /etc/init.d/mysql restart

mysql> show variables like 'c%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
| collation_connection     | utf8_general_ci            |
| collation_database       | utf8_general_ci            |
| collation_server         | utf8_general_ci            |
| completion_type          | 0                          |
| concurrent_insert        | 1                          |
| connect_timeout          | 10                         |
+--------------------------+----------------------------+
14 rows in set (0.00 sec)

* MySql에서 데이터베이스 생성 
mysql>CREATE DATABASE {database_name} DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

목요일, 3월 22, 2012

MySQL에서 root passwd 설정


출처: joon

mysql -uroot -p


mysql> use mysql;
Database changed


mysql> update user set password=password('password') where user='root';
Query OK, 3 rows affected (0.43 sec)
Rows matched: 3  Changed: 3  Warnings: 0


mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

-password와 root는 외따옴표로 묶어 주시면 됩니다.

MySQL Error Code

Posted at 2009/05/07

출처: tini4u

MySQL 에러 코드 확인 방법

perror {code_number}

InnoDB타입과 MyISAM타입 table에 대한 고찰

Posted at 2009/05/08

출처: Program2.0

MyISAM과 InnoDB에 대해서 정리 잘하셔서..
그냥 으레 MyISAM을 썼었는데..
역시 무엇이든 경우에 맞게 사용하면 문제 없다는 만고의 진리를 느낌.. ^^


먼저 나온게 MyISAM 타입이고
속도는 MyISAM 타입이 훨씬 빨랐는데
이후에 InnoDB 타입이 나오면서
트랜잭션, 외부키참조, 트리거 등 훌륭한 많은 기능이 추가되었다.
이후에 패치하면서 속도가 향상되었는데
지금은 MyISAM 타입과 거의 비슷한 속도라고 한다.

일반적으로 MyISAM 타입은 트렌젝션을 지원하지 않는다.
그래서 insert, update, delete 작업시 부가적인 작업을 하지 않는다.
하지만 InnoDB타입은 트랜젝션을 지원한다.

여러가지 상황에 따라 다르겠지만,
일반적으로 MyISAM 타입은 insert, update할 때 빠르고, 
InnoDB 타입는 검색시 빠르다고 한다.
혼용시 서버 메모리 설정을 보다 잘 해야한다고 한다.


InnoDB 타입은 파일 용량에 제한이 있는 시스템에서
파일을 여러개로 나눠서 사용가능하니 좋은데,
단순쿼리이고 파일 용량에 문제도 없다면 쿼리속도는
MyISAM 타입이나 InnoDB 타입이나 별 차이는 없을 것으로 보여요.
기본적으로 InnoDB 타입을 썻을때 Mysql 은 기본이 자동커밋모드입니다.
그래서 하나 하나의 Insert, Update, Delete 를 처리하고
나서 커밋을 처리 하기 때문에 일반적으론 느립니다.

동시에 읽고 쓰기가 많은 경우라면 InnoDB 타입을 추천해요.
(동시에 읽고쓰기가 많은 경우라함은 초당 400~500 query)
물론 속도는 query문을 어떻게 만드냐에 따라서 달라질 수 있지만…

안정성 측면에서 InnoDB 타입이 MyISAM 타입보다는 훨씬 뛰어나요.
MyISAM은 대략 초당 100 query 정도일경우 적합할 것 같네요
일반 게시판 수준으로 보시면 좋을듯…

MyISAM 타입은 업데이트시 테이블 락이 걸리지만,
InnoDB 타입은 행단위 락이 걸리기 때문에
MyISAM 타입보다 느린 속도를 벌충할 수 있는 경우가 있습니다.

많은 기능을 제공하려다 보면, 프로그램이 무거워 지는 것은 당연해지죠.
그러다 보니, MyISAM보다 InnoDB가 느리긴 합니다.
두 테이블 타입의 특성도 많이 다르고,
절대적으로 몇 배 느리다라고 이야기 하는 것은 힘들죠.

--이하 생략--

이라고 해봤자 그냥 다 복사해가지고 왔다고 보는게 정확함.. :)
결론은 트랜잭션이 필요하면 InnoDB!!
이도저도 필요없으면 MyISAM!! 으로 닥치고 쓰라는..

MySQL 스토리지 엔진


MySQL에세 제공하는 스토리지 엔진

출처: afeleia

MySQL 스토리지 엔진에 대해서 좋은 글이 있어서... :)


현재 자신이 사용하는 스토리지 엔진을 확인하는 방법
mysql> show table status;
혹은
Information_schema 테이블 확인 (5.0이상부터 지원)

1. MyISAM
MySQL의 기본 스토리지 엔지으로 데이터 저장에 실제적인 제한이 없고 매우 효율적으로 저장한다. Full-Text 인덱스를 지원하며 특정 인덱스에 대해 메모리 캐쉬를 지원한다. 트랜잭션은 미지원/ 테이블 레벨의 락을 지원 잦은 변경및 삭제에는 좋은 성능이 나오지 못하나 데드락 발생은 예방

2. InnoDB
ACID 트랜잭션을 지원하며, MyISAM보다 데이터 저장비율이 낮고, 데이터 로드 속도가 느리다. 특정 데이터와 인덱스에 대해서 메모리 캐쉬를 지원하며 외부티를 지원한다. 데이터 압축이 불가능하고 자동 에러 복구 기능이 있다. 테이블 레벨이 아닌 ROW 레벨의 락을 지원한다.

3. Cluster (NDB)
트랜잭션을 지원하고 모든 데이터와 인덱스가 메모리에 존재하여 매우 빠른 데이터 로드 속도를 자랑하며 PK 사용시 최상의 속도를 나타낸다.

4. Archive
MySQL 5.0부터 새롭게 도입된 엔진으로 자동적으로 데이터 압축을 지원하며 다른 엔진에 비해 80% 저장공간 절약 효과를 자랑한다. 그리고 가장 빠른 데이터 로드 속도 또한 자랑하지만, INSERT와 SELECT만이 가능하다.

5. Federated
MySQL 5.0부터 새롭게 도입된 엔진으로 물리적 데이터베이스에 대한 논리적 데이터베이스를 생성하여 원격 데이터를 컨트롤 할 수 있다. 실행속도는 네트워크 요소에 따라 좌우되면 테이블 정의를 통한 SSL 보안 처리를 한다. 분산 데이터베이스 환경에 사용한다.