웹마스터 팁
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
mysql_fetch_row n mysql_fetch_array n mysql_fetch_object
2003.05.06 03:05
뭐 별루 팁도 아니지만
이번에 이것땜에 고생을 많이 해서 혹시 모르는 님들도 있을까하는 노친네의 염려 ㅡ,.ㅡ;;
제가 하고 싶은 말은
mysql_fetch_row
mysql_fetch_array
mysql_fetch_object
첨 PHP를 시작할때 부터 저 나름대로 코드의 가독성, 디버깅의 편리성등의 이유료
mysql_fetch_array를 줄곳 써왔는데
요번에 어느 사이트를 제작하다 보니 실행속도의 문제등으로 코드, SQL 쿼리 를 정리하는 도중
요넘들의 속도차이를 테스트 하다보니 놀라운 점들이 많더라구요.
먼저 결론부터 말씀드리자면
mysql_fetch_array 가 가장 늦습니다.
mysql_fetch_assoc 가 그다음
그리고 mysql_fetch_object와 mysql_fetch_row는 비슷한데 mysql_fetch_row가 더 빠르구요
그런데 사실 mysql_fetch_array 와 mysql_fetch_row 는 많게는 2초 까지 차이가 나더군요.
--------------------------------------------------------------------------------------------------------SQL QUERY
SELECT
sg.id, sg.pics, sg.mov_file, sg.sell_price, sg.buy_year, sg.sell_type, sg.color, sg.trm,
sg.buy_month, sg.mileage, sg.zZim,sg.hit, sg.is_del,
cm.vender, cm.k_class, cm.car_name, m.mem_post,m.mem_addr, m.mem_ID, cv.k_vender
FROM car_vender AS cv USE INDEX (is_import, e_vender)
LEFT JOIN car_model cm USE INDEX (id, vender, e_class, car_type) ON (cv.e_vender = cm.vender)
LEFT JOIN sell_goods AS sg USE INDEX (id, rel_id, rel_ref, is_del) ON (sg.rel_ref = cm.id)
LEFT JOIN member AS m USE INDEX (is_del, mem_ID_2) ON (sg.rel_id = m.mem_ID)
WHERE (sg.is_del <> 'y') AND (m.is_del <> 'y')
--------------------------------------------------------------------------------------------------------------------
여기에 약간의 where 조건이 추가 되지만 인덱스는 여러번의 테스트를 거쳐서 제대루 걸렸다고? ,ㅡ,.ㅡ;; 생각됩니다.
여기서 한가지 충고를 하고 싶은 말씀은 꼭 mysql_fetch_array를 쓰시려는 분들은 mysql_fetch_assoc 를 쓰라고 말씀드리고 싶습니다.
똑같은 방법으로 구현할 수 있는 방면에 속도는 훨씬 빠르더 군요....
다만 mysql_fetch_assoc는 $r[0]과 같은 형식은 사용할 수 없더군요. $r[0]의 형식을 쓰시려면 mysql_fetch_row를 쓰시면 되구요.
이상 좋은 팁이 되었으면 좋겠습니다.
그럼 좋은 하루 되세요^^&
참 데이터는 4만건 정도에서 테스트 되었습니다.
이번에 이것땜에 고생을 많이 해서 혹시 모르는 님들도 있을까하는 노친네의 염려 ㅡ,.ㅡ;;
제가 하고 싶은 말은
mysql_fetch_row
mysql_fetch_array
mysql_fetch_object
첨 PHP를 시작할때 부터 저 나름대로 코드의 가독성, 디버깅의 편리성등의 이유료
mysql_fetch_array를 줄곳 써왔는데
요번에 어느 사이트를 제작하다 보니 실행속도의 문제등으로 코드, SQL 쿼리 를 정리하는 도중
요넘들의 속도차이를 테스트 하다보니 놀라운 점들이 많더라구요.
먼저 결론부터 말씀드리자면
mysql_fetch_array 가 가장 늦습니다.
mysql_fetch_assoc 가 그다음
그리고 mysql_fetch_object와 mysql_fetch_row는 비슷한데 mysql_fetch_row가 더 빠르구요
그런데 사실 mysql_fetch_array 와 mysql_fetch_row 는 많게는 2초 까지 차이가 나더군요.
--------------------------------------------------------------------------------------------------------SQL QUERY
SELECT
sg.id, sg.pics, sg.mov_file, sg.sell_price, sg.buy_year, sg.sell_type, sg.color, sg.trm,
sg.buy_month, sg.mileage, sg.zZim,sg.hit, sg.is_del,
cm.vender, cm.k_class, cm.car_name, m.mem_post,m.mem_addr, m.mem_ID, cv.k_vender
FROM car_vender AS cv USE INDEX (is_import, e_vender)
LEFT JOIN car_model cm USE INDEX (id, vender, e_class, car_type) ON (cv.e_vender = cm.vender)
LEFT JOIN sell_goods AS sg USE INDEX (id, rel_id, rel_ref, is_del) ON (sg.rel_ref = cm.id)
LEFT JOIN member AS m USE INDEX (is_del, mem_ID_2) ON (sg.rel_id = m.mem_ID)
WHERE (sg.is_del <> 'y') AND (m.is_del <> 'y')
--------------------------------------------------------------------------------------------------------------------
여기에 약간의 where 조건이 추가 되지만 인덱스는 여러번의 테스트를 거쳐서 제대루 걸렸다고? ,ㅡ,.ㅡ;; 생각됩니다.
여기서 한가지 충고를 하고 싶은 말씀은 꼭 mysql_fetch_array를 쓰시려는 분들은 mysql_fetch_assoc 를 쓰라고 말씀드리고 싶습니다.
똑같은 방법으로 구현할 수 있는 방면에 속도는 훨씬 빠르더 군요....
다만 mysql_fetch_assoc는 $r[0]과 같은 형식은 사용할 수 없더군요. $r[0]의 형식을 쓰시려면 mysql_fetch_row를 쓰시면 되구요.
이상 좋은 팁이 되었으면 좋겠습니다.
그럼 좋은 하루 되세요^^&
참 데이터는 4만건 정도에서 테스트 되었습니다.
댓글 4
-
TheMics
2003.05.06 13:07
그러나 mysql_fetch_row는 번호 배열로 저장하기 때문에 테이블이 수정되거나 하는 경우 리코딩하기가 상당히 어려워집니다. 때문에 필드명으로 저장되는 mysql_fetch_array가 널리 쓰이는 거구요^^; -
TheMics
2003.05.06 13:43
좀더 자세히 말씀드리면,
mysql_fetch_array: 필드이름,필드번호 배열
mysql_fetch_assoc: 필드이름 배열
mysql_fetch_row: 필드번호 배열
mysql_fetch_object: 필드이름,필드번호 객체
이런 식으로 반환합니다.
레퍼런스에서는 희한하게도 이 실험결과와 반대인 mysql_fetch_row가 가장 느리고, assoc과 array가 그 다음이라는군요; -
특급잠수부
2003.05.07 11:10
fetch_row > fetch_assoc > fetch_array > result
이 순서로 알고있긴한데..
음 평범한 쿼리문에서는 얼마의 차이가 날런지 ...
이리저리 테스트 해봐야 겠네요...
조인말고 평범한 쿼리문에서의 1~2 초안팎의 차이는 신경쓰지 않는 편이라.
좋은 정보 감사합니다. -
sMokaHallo
2003.05.21 02:37
이궁 4만건에서 2초의 차이는 저의 어처구니 없는 실수라는 ㅜㅡ;;;
우편번호 테이블을 받아다 썻는데...
인덱스가 하나도 안걸려서, 인덱스 걸어 줬더니
1초안에 끝나는 군요.
혹시 다른 분들도 이런 어처구니 없는 실수를 안하시길...
제목 | 글쓴이 | 날짜 |
---|---|---|
htmlspecialchars 사용하시는 분들 [5] | holies | 2003.07.11 |
이미 인클루드된 파일은 다시 인클루드하지 않기 [14] | 김병희 | 2003.06.20 |
PHP 익히기 3 [11] | 구리구리 | 2003.06.17 |
PHP 익히기 2 [9] | 구리구리 | 2003.06.10 |
PHP 익히기 1 [24] | 구리구리 | 2003.06.09 |
php 로 기존 문서 포함시키기 [10] | 이성헌 | 2003.06.08 |
체크박스등으로 배열로 변수를 넘길때.. [1] | myself2 | 2003.06.06 |
홈페이지의 내용을 DB에 담기 [15] | 세죠위그이 | 2003.05.30 |
썸네일 자동생성하고 이미지 사이즈 자동 줄이기... [6] | sMokaHallo | 2003.05.21 |
Wake On Lan 기능 사용하기... [3] | sMokaHallo | 2003.05.17 |
스킨 시스템 구축.(1탄 읽어오기) [11] | 씨파개 | 2003.05.13 |
none 과 null 처리 문제 해결법 [5] | 허현승 | 2003.05.12 |
세션파일 크기/만들어진 시간체크해서 정해진 시간이후엔 파일 지우기?;; (라고 써야되낭? ;;) [6] | 다오케이 | 2003.05.12 |
PHP+MSSQL?(수정판) [11] | 씨파개 | 2003.05.10 |
이미지 전용 파일업로드시의 확장자 체크시.. [4] | 특급잠수부 | 2003.05.07 |
mysql_fetch_row n mysql_fetch_array n mysql_fetch_object [4] | sMokaHallo | 2003.05.06 |
if 시리즈 2탄.. ㅡㅡ;; [9] | 씨파개 | 2003.05.05 |
PHP 확장 함수를 이용한 exif 정보 출력 [1] | NoSoRi | 2003.04.30 |
if 시리즈 1탄! [15] | 씨파개 | 2003.04.28 |
ID3v1태그 읽는 함수입니다. [4] | 김승태 | 2003.04.27 |