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 및 백분율로 필드에 가입하는 데 더 많은 기능을합니다.
이러한 쿼리의 결과를 캐시하려면 [memcached] (http://memcached.org/)와 같은 것을 고려하십시오. 갑판이 특히 자주 변경되지 않는 경우 효과적입니다. –
데크는 자주 변경되지 않지만 검색하는 사람의 인벤토리는 변경됩니다. 사람들이 항상 추가하기 때문에 갑판 테이블이 자주 바뀔 것입니다. – voldomazta