<div><br></div> <div><br></div> <div>개발환경은 php , MySql 5.1.45 입니다.</div> <div><br></div> <div>우선 기본 베이스 테이블이 2개 이고</div> <div>1번째는 게시물 테이블(g_board)</div> <div>2번째는 첨부파일 테이블(g_attach) 입니다</div> <div><br></div> <div>워낙 연동하는 다른 테이블들이 많아서 view 테이블을 만들었었는데</div> <div>게시물 한개당 최대 첨부 파일 갯수를 6개로 제한 해 두고 </div> <div>처음 쿼리를</div> <div><br></div> <div>create view view_etc_tbl AS</div> <div>select idx, ....... , </div> <div>(select CONCAT(attach_path,'/',attach_savename) from g_attach </div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>where b.idx = board_idx order by attach_idx asc limit 0, 1) as att_file1,</div> <div>(select CONCAT(attach_path,'/',attach_savename) from g_attach </div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>where b.idx = board_idx order by attach_idx asc limit 1, 1) as att_file2,</div> <div>.......,</div> <div>from g_board order by idx desc</div> <div>(다른 테이블들 과의 Join 들은 제외하고 주요코드만 정리한것입니다.)</div> <div><br></div> <div>뭐 이런식으로 짜서 view_etc_tbl 이란 뷰테이블을 만들었습니다.</div> <div>그런데 저게 내부에서 select 문이 6번 이상을 돌게 되면서 </div> <div>데이터 양이 많지 않음에도 불구하고</div> <div>쿼리한번 호출하는데 2초 이상이 걸리게 되더라구요</div> <div>(저 6개의 select문만 제거 하면 실행시간이 0.1초대로 줄어듭니다.)</div> <div><br></div> <div>그래서 상기 뷰테이블을 조인문으로 바꿔서 새로이 만들려고 시도 했으나 </div> <div>MySql 에서는 뷰테이블을 만들시에 변수도 사용할 수 없고, </div> <div>또한 결정적으로 Sub쿼리를 쓸수 없게 되어있더라구요</div> <div>그냥 sql 쿼리문으로 돌리면 잘 돌아가는데 이걸</div> <div>뷰테이블로 만들려구하면 주구장창 </div> <div>You have an error in your SQL syntax:~~~</div> <div>뭐 이런 애러가 떠서 결국 중도에 포기 하고 말았습니다.</div> <div>(꼼수로 서브쿼리에 들어갈 select 문을 view 테이블로 만들고 그</div> <div>view 테이블을 참조해서 view 테이블을 만들려고</div> <div>시도했는데 그것도 MySql에선 안되더군요... 내 오라클을 돌려줘..ㅠㅠ)</div> <div><br></div> <div>결국엔 뷰테이블 사용을 포기 하고 쿼리문에서</div> <div>우선 </div> <div><br></div> <div>CREATE VIEW gb AS </div> <div>select </div> <div>max(f.board_idx) AS board_idx,</div> <div>max(f.attach_path) AS attach_path,</div> <div>group_concat(f.attach_savename order by f.board_idx ASC separator '|') AS attach_savename</div> <div>from g_attach f group by f.board_idx;</div> <div><br></div> <div>로 gb라는 view 테이블을 만들고 그안에서 첨부파일이 포함된 폴더는 </div> <div>게시물 별로 같으니 그냥 한 컬럼에 통일하고 첨부파일명은 '|' 라는 구분자로 구분해서</div> <div>한컬럼에다 쭉 몰아넣어버렸습니다.</div> <div><br></div> <div>그다음에 include 되는 파일에서 </div> <div><br></div> <div>(SELECT</div> <div> b.idx as idx, .........,</div> <div> attach_path, attach_savename</div> <div> from </div> <div> (select idx, ........., from g_board as FB left outer join gb as GB On FB.idx = GB.board_idx order by idx asc) AS b)</div> <div> AS TTD </div> <div><br></div> <div> 라고 문자열 상수로 선언 해버리고 이전에 view_etc_tbl 을 참조하던부분을 선언된 상수로 바꿔버렸습니다.</div> <div> 그러고 나니깐 기존에 </div> <div> att_file1 ~ 6 의 컬럼에 나오던 부분을</div> <div> attach_path 컬럼에 파일이 저장된 폴더가 나오고 </div> <div> attach_savename 에 '|'로 구분된 파일명 6개가 나오게 했습니다.</div> <div> 결국엔 지금까지 view_etc_tbl 을 참조해서 att_file1~6까지 뿌려주던 php 파일 모두를 </div> <div> path와 savename 을 받아와서 구분자로 구분해서 하나로 합쳐주고 뿌려주게 바꿔야만 했는데요</div> <div> 이런 작업을 해주니깐 기존 view 테이블을 참조하는 php 파일의 로딩속도가 약 3~4초였었는데..</div> <div> 지금은 이미지 로딩까지 포함해서 0.7~0.8 초대로 체감속도가 확 달라졌습니다.</div> <div><br></div> <div>문제는 상수로 쓴 sql 쿼리문이 지금 제가 최대치로 줄여놔서 6줄이지만</div> <div>실제 코드에 들어간 코드는 한글에서 치면 A4용지 2장을 조금 넘는 </div> <div>어마어마한 길이의 쿼리문이 되어버렸다는거죠.....;;</div> <div>(저 상수에 앞뒤로 붙는 쿼리문 까지 합치면 쿼리문 길이가 그야말로 ㅎㄷㄷ)</div> <div>(난 이상하게 쿼리문이 길어지면 길어질수록 실행속도가 올라가더라는;;;)</div> <div><br></div> <div>뭐 저처럼 MySql 에서 게시물 리스트와 첨부파일이나 댓글리스트를 받아와서 한화면에 같이 </div> <div>뿌려주어야 할 일이 생기신 분들께 좋은 활용방안이 될수있을꺼라 생각해서 올립니다.</div> <div><br></div> <div>혹시나 해서 질문드립니다.</div> <div>저 위에 올린 쿼리문을 MySql에서 View테이블로 만들수는 정말 없는건가요....ㅡ.ㅜ</div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.