웹마스터 팁
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초안에 끝나는 군요.
혹시 다른 분들도 이런 어처구니 없는 실수를 안하시길...
제목 | 글쓴이 | 날짜 |
---|---|---|
마우스커서 움직임으로 이미지목록 스크롤 [1] | monozzang | 2005.03.13 |
브라우저를 동적으로 부드럽게 리사이즈 하는 소스 [4] | monozzang | 2005.03.06 |
가로 세로가 호환되는 메뉴 [3] | 이영준 | 2005.03.02 |
주소자동으로 이동 시키기(포워딩) [8] | 네츠키 | 2005.02.22 |
홈피 만들때 자주 사용되는 메타태그 모음 [18] | 김태영 | 2005.02.20 |
상위 셀렉트박스 값 변경시 하위셀렉트박스(다수)제어하기. [2] | Xian | 2005.02.19 |
뒤죽박죽어구 찾아내기 [6] | 미친개 | 2005.02.14 |
홈페이지index경로 이외의 하위 경로 차단 하는 방법 [펌] [10] | 프란시스 | 2005.02.05 |
허접한 메일 폼 검사 하기 스크립트입니다.. [1] | Ansi™ | 2005.02.06 |
간단하면서도 강력한 웹페이지에 암호걸기 [5] | 대류 | 2005.02.03 |
더 간단한 top 버튼만들기 [3] | 나상선 | 2005.01.21 |
페이지 경로 히스토리 표시하기 [0003] | EDENe | 2005.01.19 |
그냥 확 멋있는거 그냥그냥!!!! [3] | 미친개 | 2005.01.16 |
COPY & CUT 막기 / 경고 [0002] [10] | EDENe | 2005.01.16 |
홈페이지 TOP 버튼 만들기 + 응용 [0001] [2] | EDENe | 2005.01.15 |
로딩중 스크립트와 셀렉트창 같이 쓰기 [1] | 예뜨락 | 2005.01.13 |
홈페이지 탑 TOP 버튼 만들어보기 [9] | 편입성공기 | 2004.12.06 |
링크주소 감추기 [8] | 편입성공기 | 2004.12.06 |
팝업띄우기 [2] | 편입성공기 | 2004.12.06 |
개판 오분전 빙고 [2] | 미친개 | 2004.12.30 |