안녕하세요. 데이터가 9만여개되는 게시판이 있습니다. 쿼리는 아래와 같습니다.
select A.subject
, A.content
, A.wdate as wtime
, from_unixtime(A.wdate, '%Y.%m.%d') as wdate
, B.title
, B.subject_len
, B.down_point
, B.point_msg
, B.bbsadmin
, B.newc
, B.hotc
, B.name_type
, C.catname
, C.caticon
, D.purl
from bbs as A
left join bbsinfo as B
on A.code = B.code
left join bbscat as C
on A.category = C.idx
left join bbsmain as D
on A.code = D.code
order by A.idx
1. bbs : 게시판데이블
2. bbsinfo : 생성된 게시판정보 테이블
3. bbscat : 생성된 게시판의 카테고리항목을 관리하는 테이블
4. bbsmain : 홈페이지 메인에 노출되는 메인게시물 테이블
각 테이블별 인덱스는 잡혀있습니다.
explain을 걸어보면 실질적으로 bbs인덱스를 타지않고 Using filesort가 발생됩니다.
당연히 속도 또한 엄청느리구요.
제가 무엇인가를 놓치고 있긴 한것같은데 도통 어느곳에서 문제인지 알수가 없네요
어떤부분이 잘못된것인지 조언좀 부탁드립니다.
아..죄송합니다. 제가 중요한 부분을 놓치고 질문을 드렸네요
select A.subject
, A.content
, A.wdate as wtime
, from_unixtime(A.wdate, '%Y.%m.%d') as wdate
, B.title
, B.subject_len
, B.down_point
, B.point_msg
, B.bbsadmin
, B.newc
, B.hotc
, B.name_type
, C.catname
, C.caticon
, D.purl
from bbs as A
left join bbsinfo as B
on A.code = B.code
left join bbscat as C
on A.category = C.idx
left join bbsmain as D
on A.code = D.code
where (A.subject like '%검색어%' or A.content like '%검색어%')
order by A.idx
limit 0, 10
검색을 했을때 실행되는 쿼리이며 페이징처리가 되어있습니다. ㅡㅡ
질문 잘못올려 죄송합니다.
답변감사합니다.
마농님의 말씀대로 시도해보았으나 데이터가 노출이 안되네요 ㅡㅡ
제가 잘못한것같은데요. 아래처럼 쿼리를 변경 시도해보았습니다.
잘못된 부분 지적부탁드립니다.
select A.subject
, A.content
, A.wdate as wtime
, from_unixtime(A.wdate, '%Y.%m.%d') as wdate
, B.title
, B.subject_len
, B.down_point
, B.point_msg
, B.bbsadmin
, B.newc
, B.hotc
, B.name_type
, C.catname
, C.caticon
, D.purl
from (
select *
from bbs
order by idx
limit 0, 10
) as A
left join bbsinfo as B
on A.code = B.code
left join bbscat as C
on A.category = C.idx
left join bbsmain as D
on A.code = D.code
where (concat(' ', A.subject, ' ') LIKE '% 검색어 %' or concat(' ', A.content, ' ') LIKE '% 검색어 %')
SELECT a.subject , a.content , a.wdate AS wtime , from_unixtime(a.wdate, '%Y.%m.%d') AS wdate , b.title , b.subject_len , b.down_point , b.point_msg , b.bbsadmin , b.newc , b.hotc , b.name_type , c.catname , c.caticon , d.purl FROM (SELECT subject , content , wdate , code , category , idx FROM bbs WHERE (INSTR(subject, '검색어') > 0 OR INSTR(content, '검색어') > 0 ) ORDER BY idx DESC LIMIT 0, 10 ) a LEFT JOIN bbsinfo b ON a.code = b.code LEFT JOIN bbscat c ON a.category = c.idx LEFT JOIN bbsmain d ON a.code = d.code ;