- mysql limit 처리
- ANSI ↔ utf-8 변환, 인코딩 한글깨짐 해결방법
mysql limit 처리
mysql 페이징 쿼리 정리한 내용
페이징 처리시 limit를 사용하는데, 데이타가 많아질 수록 실행 속도가 느려짐.
아래 자료는 데스크탑에서 실행했을때 처리 속도임.
테이블 만들기
CREATE TABLE IF NOT EXISTS sample_memo (
m_idx INT( 11) unsigned not null auto_increment,
m_name varchar(50) not null ,
m_email varchar(100) not null ,
m_pass varchar(50) not null ,
m_memo TEXT not null ,
m_ip varchar(15) not null ,
m_regdate datetime not null,
primary key (m_idx)
);
쿼리를 엑셀에서 10만건 생성 후 memo.sql로 저장
insert into sample_memo (m_name,m_email,m_pass,m_memo,m_ip,m_regdate) values ('방문자', 'test@test.net', password('1111'), '60001번째 방문중입니다.', '127.0.0.1', sysdate());
cmd에서 10만건 자료 등록
mysql -uroot -p123456 bbs < memo.sql
2만건 자료 중 마지막 10개 가져오기
SELECT * FROM sample_memo ORDER BY m_idx DESC LIMIT 19990, 10;
0.22sec
select * from sample_memo where m_idx <= (select m_idx FROM sample_memo order by m_idx desc limit 19980,1) order by m_idx desc limit 10;
0.01sec
ROWNUM 구현
select * from ( SELECT @RNUM := @RNUM + 1 AS ROWNUM, t.* FROM ( SELECT * FROM sample_memo ) t, ( SELECT @RNUM := 0 ) R) c where c.ROWNUM BETWEEN 19990 AND 20000;
0.12sec
10만건 자료 중 마지막 10개 가져오기
1.인덱스를 알면 가장 빠름, 하지만 현실적으로 어려움이 있음
select * from sample_memo where m_idx <= 99990 order by m_idx desc limit 10;
0.00sec
2.일반적인 Limit
SELECT * FROM sample_memo ORDER BY m_idx DESC LIMIT 99990, 10;
1.04sec
3.현재 사용중인 쿼리 (1번과 2번 중간)
select * from sample_memo where m_idx <= (select m_idx FROM sample_memo order by m_idx desc limit 99980,1) order by m_idx desc limit 10;
0.04sec
4.ROWNUM 구현시
select * from ( SELECT @RNUM := @RNUM + 1 AS ROWNUM, t.* FROM ( SELECT * FROM sample_memo ) t, ( SELECT @RNUM := 0 ) R) c where c.ROWNUM BETWEEN 99990 AND 100000;
2.31sec
5.Join사용(3번과 비슷한 처리속도)
select * from sample_memo inner join (select m_idx from sample_memo order by m_idx desc limit 99980, 10) as lim using(m_idx);
0.04sec
50만건 자료 중 마지막 10개 가져오기
1.인덱스
select * from sample_memo where m_idx <= 499990 order by m_idx desc limit 10;
0.00sec
2.일반적인 Limit
SELECT * FROM sample_memo ORDER BY m_idx DESC LIMIT 499990, 10;
4.15sec
3.현재 사용중인 쿼리 (1번과 2번 중간)
select * from sample_memo where m_idx <= (select m_idx FROM sample_memo order by m_idx desc limit 499980,1) order by m_idx desc limit 10;
0.17sec
4.ROWNUM
select * from ( SELECT @RNUM := @RNUM + 1 AS ROWNUM, t.* FROM ( SELECT * FROM sample_memo ) t, ( SELECT @RNUM := 0 ) R) c where c.ROWNUM BETWEEN 499990 AND 500000;
2.40sec
5.Join사용 (3번과 비슷한 처리속도)
select * from sample_memo inner join (select m_idx from sample_memo order by m_idx desc limit 499980, 10) as lim using(m_idx);
0.17sec
ANSI ↔ utf-8 변환, 인코딩 한글깨짐 해결방법
[PHP] ANSI ↔ utf-8 변환, 인코딩 한글깨짐 해결방법
utf-8 세팅된 DB에서 파일이름을 불러오고, 파일은 저장된 폴더에서 불러와서 다운로드를 처리하는 부분에 문제가 발생 했습니다.
다운로드한 한글 화일명이 정상적으로 출력되지 않았습니다.
euc-kr은 정상적으로 출력되어 어쩔수 없이 변환 해야 했습니다.
utf-8 => euc-kr
$original = iconv("UTF-8","EUC-KR", $original);
위와 같이 적용할 수 있었습니다.
반대의 경우는 테스트 해보지 않았는데, 가능할 것으로 생각됩니다.
'APM' 카테고리의 다른 글
PHP var $ 와 this 설명, PHP 기본함수, RewriteRule,mysql utf8 설정 (1) | 2024.02.16 |
---|---|
Mysql 내장함수, [mysql]날짜 관련 함수 모음 (2) | 2024.02.16 |
PHP 강좌 기초 - 관계형 게시판,설치형 게시판 만들기 (0) | 2024.02.16 |