2009-05-18 3 views
1

카테고리 ID를 기반으로 여러 카테고리에서 많은 헤드 라인을 끌어낼 수있는 페이지가 있습니다.MYSQL에서 쿼리하거나 PHP 로직을 사용하는 것이 더 빠릅니다.

모든 헤드 라인을 잡아 당긴 다음 PHP if/ifelse 문을 통해 정렬하거나 각 카테고리의 헤드 라인이 포함 된 여러 쿼리를 실행하는 것이 더 좋은지 궁금합니다.

+0

카테고리 ID의 출처는 무엇입니까? 카테고리 테이블이 있습니까? 모든 카테고리와 헤드 라인 또는 선택한 카테고리 만 얻고 있습니까? – CoderDennis

+0

나는 각 표제 행마다 카테고리 필드를 갖게 될지 또는 자신의 테이블처럼 분리할지에 대해서는 아직 결정하지 못했습니다. – Tim

답변

8

하나의 검색어로 검색하지 않으시겠습니까? 다음과 같이하십시오 :

SELECT headline FROM headlines WHERE category_id IN (1, 2, 3, ...); 

PHP에서 헤드 라인을 필터링하는 경우, 얼마나 많은 돈을 버려야할지 생각해보십시오. 결국 헤드 라인의 10 % 만 제거하면 결과의 90 %를 버릴 때만큼 중요하지 않습니다.

+1

필자가 작업 한 가장 극단적 인 예는 원하는 결과를 반환하는 단일 쿼리를 사용하기 위해 PHP 처리 블록 (시작 코더로 작성)을 사용하여 여러 쿼리를 다시 작성하는 것입니다. 처리 시간이 20 초 이상에서 거의 순간적으로 단축되었습니다. – CoderDennis

+0

각 항목은 IN을 사용하여 값의 배열을 제공합니까? – Tim

0

많은 동시 쿼리가있는 경우 병목 현상이 발생할 수 있으므로 일반적으로 DB에 과부하되지 않는 것이 좋습니다.

그러나 PHP에서 처리하는 것은 인데 일반적으로입니다. Apache는 여러 요청을 처리해야하므로 스레드를 fork합니다.

평상시와 같이 "트래픽이 얼마나 있습니까?"

0

MySQL은 이미 데이터 선택 및 정렬을 수행 할 수 있습니다. 나는 게으르고 이것을 사용하는 것이 좋습니다.

나는 또한 모든 카테고리와 헤드 라인을 한 번에 가져 오는 (1) 검색어를 찾습니다. 주문 ORDER BY 카테고리, 게시 날짜 또는 다른 것이 있습니까?

0

데이터베이스를 방문 할 때마다 비용이 들게됩니다. 무시한 다음 추가 데이터를 반환하면 비용이 발생합니다. 따라서 데이터베이스에서 가지 치기를 수행하는 것이 좋습니다.

필자가 필요로하는 데이터를 결정할 때 쿼리가 매우 복잡해 지므로 데이터베이스에서 최적화하기가 어렵고 코드에서 쉽게 수행 할 수있는 경우가있을 수 있습니다. 그러나 우리가 "category = 'Sports'"라는 이야기에서 헤드 라인을 선택한 다음 "category = 'Politics'"다음에 "category = 'Health'"등의 이야기에서 헤드 라인을 선택하는 이야기에서 헤드 라인을 선택한 다음 " 카테고리를 선택하십시오. ('건강', '스포츠', '정치')에서 카테고리가있는 이야기의 헤드 라인, 후자가 분명히 좋습니다.

2

이러한 종류의 질문은 상황에 따라 최상의 코스가 결정되므로 항상 대답하기가 어렵습니다. 진정한 정답은 없으며 더 나은 방법은 없습니다. 제 경험상 PHP 나 데이터베이스에서 작업을 시도 하느냐가 중요하지 않습니다. 왜냐하면 항상 memcached과 같은 캐싱 엔진을 사용하여 값 비싼 연산 결과를 캐시해야하기 때문입니다. 그렇게하면 결과가 캐싱되어 즉시 사용할 준비가되므로 db 또는 PHP 자체에서 많은 시간을 소비하지 않을 것입니다. 결론적으로 말하자면, xDebug과 같은 도구를 사용하여 응용 프로그램을 프로파일 링하지 마십시오. 성능 병목 현상은 단순한 추측이라고 생각하는 것입니다.

관련 문제