MySQL 스토리지 엔진


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

출처: 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 보안 처리를 한다. 분산 데이터베이스 환경에 사용한다.



크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by gwlee

2009/07/14 11:13 2009/07/14 11:13
, ,
Response
0 Trackbacks , 0 Comments
RSS :
http://thegreatgoodplace.com/tt/study/rss/response/168

Trackback URL : http://thegreatgoodplace.com/tt/study/trackback/168

Leave a comment

출처: 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!! 으로 닥치고 쓰라는..

크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by gwlee

2009/05/08 20:47 2009/05/08 20:47
, ,
Response
0 Trackbacks , 0 Comments
RSS :
http://thegreatgoodplace.com/tt/study/rss/response/126

Trackback URL : http://thegreatgoodplace.com/tt/study/trackback/126

Leave a comment

MySQL Error Code 확인


출처: tini4u

MySQL 에러 코드 확인
perror {code_number}
크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by gwlee

2009/05/07 13:55 2009/05/07 13:55
,
Response
0 Trackbacks , 0 Comments
RSS :
http://thegreatgoodplace.com/tt/study/rss/response/124

Trackback URL : http://thegreatgoodplace.com/tt/study/trackback/124

Leave a comment

ResultSet를 사용한 행 갯수



SQL 문 (COUNT()) 에 의한 Row 갯수

public class count {
 
  public static void main(String[] args) throws Exception {
        String jdbcUrl = "jdbc:mysql://localhost:3306/"+database;
        String dbId = id;
        String dbPass= passwd;
       
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection(jdbcUrl,dbId,dbPass);       
        Statement stmt = conn.createStatement();
     
        int rowcount = 0;
        
        ResultSet rs = stmt.executeQuery("SELECT COUNT(*) FROM employee_tbl");
        if(rs.next()) {
          rowcount = rs.getInt(1);
        }
        System.out.println("Total rows : " + rowcount);
  }
}


ResultSet에 검색된 결과에 의한 Row 갯수 

public class count {
 
  public static void main(String[] args) throws Exception {
        String jdbcUrl = "jdbc:mysql://localhost:3306/"+database;
        String dbId = id;
        String dbPass= passwd;
       
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection(jdbcUrl,dbId,dbPass);       
        Statement stmt = conn.createStatement();

        int rowcount = 0;
    
        ResultSet rs = stmt.executeQuery("SELECT COUNT(*) FROM employee_tbl");
        rs.last();     
        int rowcount = rs.getRow();
        rs.beforeFirst();

        System.out.println("Total rows : " + rowcount);         
  }
}


크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by gwlee

2009/04/28 21:39 2009/04/28 21:39
, , , ,
Response
0 Trackbacks , 0 Comments
RSS :
http://thegreatgoodplace.com/tt/study/rss/response/121

Trackback URL : http://thegreatgoodplace.com/tt/study/trackback/121

Leave a comment

MySQL UTF-8 셋팅


테스트 환경 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;


크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by gwlee

2009/04/23 16:55 2009/04/23 16:55
, ,
Response
0 Trackbacks , 0 Comments
RSS :
http://thegreatgoodplace.com/tt/study/rss/response/98

Trackback URL : http://thegreatgoodplace.com/tt/study/trackback/98

Leave a comment

Mac에 설치해논 mediawiki 지대로 복구


Mac OsX는 덮어쓸 경우 윈도우와같이 시스템 쪽을 덮어쓰는 방식인데

윈도우와 달리 그나마 명석해서 시스템 관련 폴더를 아예 백업을 해버려서
기존에 Mediawiki (/usr/local/httpd/htdoc밑에)와 MySQL (/usr/local/mysql/)를
고스란히 백업 시켜놓아서..

그냥 새로 셋팅하고, 파일 덮어버렸슴다~ ㅋㅋ

세상 모 어렵게 살아  쉽게살아야지~ ^^

크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by gwlee

2009/03/17 21:35 2009/03/17 21:35
, ,
Response
0 Trackbacks , 0 Comments
RSS :
http://thegreatgoodplace.com/tt/study/rss/response/92

Trackback URL : http://thegreatgoodplace.com/tt/study/trackback/92

Leave a comment

groupconcat

출처: phpschool

unicode , title
001-001 인사말
001-002 저서
001-003 동영상
001-004 사진
001-005 법문/설교
002-001 건강생활정보
002-002 가보고싶은곳
002-003 지역특산물
002-004 맛집소개
003-001 스피치이론
003-002 프리젠테이션
003-003 이미지트레이닝
003-004 인사말
003-005 유머및레크레이션
003-006 사회및소개법
003-007 3분스피치
004-001 격려사및환영사
004-002 신년사및송년사
004-003 이임사및취임사
004-004 입학식사및수여식사
004-005 인터뷰및기고문
004-006 기타인사말
005-001 교재
005-002 분임토의
005-003 각종계획서
005-004 업무편람
005-005 기타

SQL 은

select unicode,group_concat(title separator '|') from t_category where unicode
like '___-___' group by unicode

이렇게 하니..위의 결과가 나왔습니다...

제가 원하는것은....

001 인사말|저서|동영상|사진|법문/설교
002 건강생활정보 |가보고싶은곳|지역특산물|맛집소개
003 스피치이론 |프리젠테이션|이미지트레이닝|인사말|유머및레크레이션|....
.
.
.
이렇게 인데...어떻해 해야 할지 도움좀 부탁드립니다..;;
==============================================

3자리문자 - 3자리 문자의 조합이라면
group by unicode 를 아래와 같이
group by left(unicode,3)
크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by gwlee

2008/08/25 02:18 2008/08/25 02:18
,
Response
0 Trackbacks , 0 Comments
RSS :
http://thegreatgoodplace.com/tt/study/rss/response/34

Trackback URL : http://thegreatgoodplace.com/tt/study/trackback/34

Leave a comment

출처: vicjung

'GRANT' 명령을 이용하면 쉽게 사용자 추가 및 권한 설정이 가능합니다. (MySQL Manual 4.3.5)

  • 일반 사용자 추가
 
mysql> grant all privileges on dbuser.* to dbuser@localhost
identified by 'password' with grant option;

  • 특정 이름의 데이터베이스에 대한 모든 권한을 가지는 사용자 추가
 
mysql> grant all privileges on `dbuser_%`.* to dbuser@localhost
identified by 'password' with grant option;


'dbuser_'으로 시작되는 데이터베이스에 대한 모든 권한을 가지는 'dbuser' 사용자 계정 추가%%% 이런식으로 계정을 만들면 새로운 사용자에 대한 개별적인 데이터베이스 권한 설정을 생략할 수 있습니다. -- 이현진


역따옴표(?) 아니고 싱글따옴표입니다.
크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by gwlee

2008/08/25 02:16 2008/08/25 02:16
, ,
Response
0 Trackbacks , 0 Comments
RSS :
http://thegreatgoodplace.com/tt/study/rss/response/32

Trackback URL : http://thegreatgoodplace.com/tt/study/trackback/32

Leave a comment

ALTER 문법을 이용한 character set


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


크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by gwlee

2008/08/25 02:14 2008/08/25 02:14
,
Response
0 Trackbacks , 0 Comments
RSS :
http://thegreatgoodplace.com/tt/study/rss/response/30

Trackback URL : http://thegreatgoodplace.com/tt/study/trackback/30

Leave a comment

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 주의는 외따옴표로 묶어 주시면 됩니다.
크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by gwlee

2008/08/25 02:08 2008/08/25 02:08
, , ,
Response
0 Trackbacks , 0 Comments
RSS :
http://thegreatgoodplace.com/tt/study/rss/response/25

Trackback URL : http://thegreatgoodplace.com/tt/study/trackback/25

Leave a comment

블로그 이미지

gwLee's Study story

- gwlee



Site Stats

Total hits:
49737
Today:
50
Yesterday:
80