2010-11-29 2 views
0

태그가있는 블로그 게시물이 포함 된 데이터베이스가 있고 해당 태그가있는 블로그 게시물을 검색하려고한다고 가정합니다.여러 쿼리 대신 하나의 조인 된 쿼리를 사용하면 성능이 향상됩니까?

나는 두 개의 쿼리를 수행 할 수 있습니다

SELECT title, text, date 
    FROM POSTS 
WHERE id = 1 

SELECT tag 
    FROM TAGS 
WHERE post_id = 1 

을 나는 또한 하나의 쿼리에서 그것을 할 수 그러나 :

SELECT title, text, date, tag 
    FROM POSTS, TAGS 
WHERE posts.id = 1 
    AND tags.post_id = posts.id 

후자는 약간 낭비, 왜냐하면 동일한 제목, 텍스트 및 날짜 열을 블로그 게시물에있는 태그 수만큼 전송하기 때문에 더 빠를 수 있습니다. 왜냐하면 서버에 단 하나의 트립이 있습니다.

중복 데이터 전송을 피하는 후자 쿼리에 대한 대안이 있습니까? 아니면 별 문제가 아니므로 사용하지 않는 여분의 바이트를 수백 개씩 전송하는 것이 두 개의 별도 쿼리를 만드는 것보다 저렴하기 때문에 어쨌든 사용해야합니다.

+0

태그 값이 결과 세트를 부 풀리는 것처럼 보입니다. 쉼표로 구분 된 태그 값 목록과 같이 사용자 요구에 더 적합한 형식이 있습니까? –

+0

쉼표로 구분 된 목록은 태그별로 게시물을 나열 할 때 그다지 효과적이지 않습니다. – Tom

답변

2

MySQL 최적화는 이처럼 간단하지 않습니다. 때때로 중간에 임시 테이블이있는 여러 쿼리가 단일 쿼리보다 훨씬 빠르며, 특히 복잡한 조인/집계가 진행되는 경우가 많습니다. 따라서 단일 쿼리는 항상 더 빠를 것이라고 가정하지 마십시오. 그러나

는 단일 쿼리는 종종만큼 빠르거나 여러 쿼리보다 빠른 이며, 그것은 당신이 훨씬 더 간결하고있는 것을 표현한다. 유선 전반에 걸친 소수의 바이트는 걱정하지 마십시오. 다른 모든 것들과 비교하면 사소합니다.

2

게시물 하나당 여행보다 서버를 한 번만 여행하십시오.

나를 신뢰하면 성능이 향상됩니다.

데이터를 검색하는 단일 쿼리는 클라이언트에서 서버로 왕복하는 것보다 더 좋은 솔루션입니다.

관련 문제