2011-10-10 4 views
0

복합 필터링을 사용하는 바쁜 사이트처럼 매초 여러 번 수행해야하는 집중적 인 쿼리가 있다고 가정 해 보겠습니다.집중적 인 MySQL 쿼리 오프로드

이 내가 동시에 수행 할 경우 DB에 대한 집중 될 것입니다 가정 20 만 개 기록을 할 것입니다
SELECT 
SUM(t.qty_inv)/t.deck_cards completed, 
t.deck_id 
FROM (
    SELECT 
    CASE WHEN m.qty_inv IS NULL THEN 0 WHEN m.qty_inv > dc.card_qty THEN dc.card_qty ELSE m.qty_inv END qty_inv, 
    dc.deck_id, 
    d.deck_cards 
    FROM mtgb_test.decks d 
    INNER JOIN mtgb_test.decks_cards dc ON (d.deck_id = dc.deck_id) 
    LEFT OUTER JOIN (
    SELECT 
    COUNT(*) qty_inv, item_print_id print_id 
    FROM mtgb_test.inventories_items 
    WHERE item_user_id = 1 
    GROUP BY item_print_id 
) m ON (m.print_id = dc.card_print_id) 
) t 
GROUP BY deck_id 
ORDER BY completed DESC; 

(예를 들어, 여러 사용자가 동시에 검색) : 다음은 쿼리의 샘플입니다 . 이처럼 집중적 인 프로세싱을 오프로드 할 수있는 곳에서 사용할 수있는 특수화 된 소프트웨어 또는 방법이 있습니까? 나는 sphinx search에 대해 듣고 모든 좋은 의견을 가지고 있지만 텍스트 검색에만 좋을 것이라고 생각합니다. 내 쿼리는 ID 및 백분율로 필드에 가입하는 데 더 많은 기능을합니다.

+0

이러한 쿼리의 결과를 캐시하려면 [memcached] (http://memcached.org/)와 같은 것을 고려하십시오. 갑판이 특히 자주 변경되지 않는 경우 효과적입니다. –

+0

데크는 자주 변경되지 않지만 검색하는 사람의 인벤토리는 변경됩니다. 사람들이 항상 추가하기 때문에 갑판 테이블이 자주 바뀔 것입니다. – voldomazta

답변

관련 문제