반응형
Mysql은 오라클이나 SQL Server 군 처럼 Paging을 하기위한

rownum 이란 함수가 지원되지 않는다.

따라서 보통 limit를 사용하는데, 이렇게 되면 페이지의 순번을 나눌때 자바단에서 별도 로직으로 처리하여

보여줘야 하기 때문에 여간 귀찮은 일이 아니다.

그래서 Mysql 에서 Rownum을 구현하여 Paging하는 기법에 대해 알아보도록 하겠다.


[ MYSQL 에서 RowNum을 구현한 Paging Query ]
  SELECT *
FROM   (SELECT @rnum := @rnum + 1 AS rownum,
               testdb.* 
        FROM   (SELECT @rnum := 0) r,
               testdb
        ORDER  BY idx DESC) result
WHERE  rownum BETWEEN ( 1 + ( 1 - 1 ) * 10 ) AND ( 1 * 10 ) 



위 쿼리는 페이지 사이즈가 10인 경우를 셋팅한 값이다.

페이지 사이즈가 1 ~ 11 ~ 21 이렇게 10을 공차로 진행되기 때문에 등차수열 공식에 따라

F(x) = a1(초기값) + (n-1)d(공차)

를 이용하여 1+ (n-1) * 10 이 된다.

그럼 limit를 이용한 방법에 따라 보자

[ MYSQL 에서 LIMIT 를 이용한 Paging Query ]
 SELECT *
FROM   testdb
ORDER  BY idx DESC
LIMIT  0, 10 



위 쿼리는 결과값은 앞의 값과 별 다를것이 없다.

그럼 둘의 속도차이는 어떤지 보자...

Mysql 옵티마이져가 Cost인지 뭔지는 아직 잘모르는 상황에서 Isam 방식의 테이블 스캔시

80만건의 데이터를 기준으로 하였을때

Rownum = 4초
limit  = 0초


이다. 흠.~~` 근데 limit를 쓰면 자바단에서 소스로 처리해야할 순번 문제가 있다.

결론적으로 데이터가 대용량 서비스 인 경우는 limit를 사용하는게 적당하며, 50만건 이하의 데이터가 있을 시에는
ROWNUM을 구현하는 것이 바람직 한 방법이라고 생각한다.

이상 랑이의 한마디 끝~~

반응형

'DB > Maria & Mysql' 카테고리의 다른 글

[MYSQL GRANT를 이용한 권한 설정]  (0) 2010.07.16
[ MYSQL 유용한 함수 ]  (0) 2010.07.09
Mysql Character Set 변경방법  (0) 2010.06.16
Mysql 원격접속 허용 설정하기  (0) 2010.06.04
Mysql 계정 생성 방법 기술  (0) 2010.06.04
반응형
Mysql을 설치하면 윈도우의 경우 GUI로 설정을 결정 할 수 있지만...

리눅스의 경우 기본적으로 latin1 인코딩으로 결정나 버린다.

이런 환경에서 euckr or utf-8로 변경하는 방법에 대해 알아보자.



[1] 현재 Character set 확인방법
 mysql> show variables like 'c%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
| collation_connection     | latin1_swedish_ci          |
| collation_database       | latin1_swedish_ci          |
| collation_server         | latin1_swedish_ci          |
| completion_type          | 0                          |
| concurrent_insert        | 1                          |
| connect_timeout          | 5                          |
+--------------------------+----------------------------+
14 rows in set (0.00 sec)

[2] Character Set 변경 방법

 $ vim /etc/mysql/my.cnf

==> 5.5 이하 버젼
[client]
default-character-set = euckr
[mysql]
default-character-set = euckr
[mysqld]
default-character-set = euckr

==> 5.5 버젼
[client]
default-character-set = euckr
[mysql]
default-character-set = euckr
[mysqld]
init_connect=set names euckr
character-set-server=euckr

[3] mysql 재시작

 $ sudo /etc/init.d/mysql restart
[sudo] password for userId:
 * Stopping MySQL database server mysqld                                                                                                                                  [ OK ]
 * Starting MySQL database server mysqld                                                                                                                                  [ OK ]
 * Checking for corrupt, not cleanly closed and upgrade needing tables.
$

[4] 최종 변경된 내역 확인

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





반응형
반응형
개삽질을 했따..~

이전에 한번 해놓고 정리를 안해놨다가 나참 어이가없기 하루종일 고생했네

우선 기본설정을 보자.

DB가 생성되고 난 후부터 설명하겠다.

1) mysql DB의 db Table에 Host정보를 %로 바꾼다.

2) mysql DB의 user Table에 Host정보를 %로 바꾼다.


이까지는 개나 소나 다할 수 있다.으~~

열받는 부분.


우분투 서버에서는 binding IP가 default로 셋팅되어져서 나오기 때문에 아래처럼 해주어야 한다.

$vi /etc/
mysql/my.cnf

#bind-address = 127.0.0.1  => 요기 부분을 찾아서 주석을 없애주어야 한다..


이상 삽질 완료.

반응형

'DB > Maria & Mysql' 카테고리의 다른 글

[ MYSQL 유용한 함수 ]  (0) 2010.07.09
[Mysql Paging Query]  (3) 2010.07.02
Mysql Character Set 변경방법  (0) 2010.06.16
Mysql 계정 생성 방법 기술  (0) 2010.06.04
Mysql 명령어 모음 - 필요한것만 업데이트예정임.  (0) 2009.12.08
반응형

본사 복귀 이후 프로젝트를 진행하기 위해 기본적인 설정을 공부하여 기록해 둔다.

맨날 까먹어서 아싸리 이제부터 복사하기 위해 한번 제대로 해놓자!!!


[MYSQL 설정]

1. root로 로그인 한다.
mysql -u root -p

2. Database 생성한다.
mysql> create database artinpost;
Query OK, 1 row affected (0.00 sec)


3. mysql Database로 이동한다.
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

4. mysql 의 관리형 Database인 mysql 에서 사용하고자 하는 DB와 계정 사용자를 연결한다.
mysql> insert into db values ('localhost','artinpost','artinpost','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
Query OK, 1 row affected (0.00 sec)

 

5. mysql에 새로운 사용자와 암호를 등록한다.
mysql> insert into user (host, user, password) values ('localhost','artinpost',password('testpw'));
Query OK, 1 row affected, 3 warnings (0.00 sec)

6. mysql 를 빠져나간다.
mysql> exit
Bye


7. mysql 를 적용 한다.
$ mysqladmin -u root -p reload

8. mysqld를 재시작 한다.
$ sudo /etc/init.d/mysql restart

이상 랑이의 간단 명료 셋팅법 끝!! ㅋㅋㅋ

반응형

+ Recent posts