密集的MySQL查询卸载

时间:2011-10-10 11:09:29

标签: mysql optimization query-optimization

假设我有一个密集的查询,每秒都会进行多次,比如一个复杂过滤的繁忙网站。以下是查询示例:

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;

这将对大约200,000条记录进行,如果同时进行(例如多个用户同时搜索),我认为这些记录对数据库来说是密集的。有没有我可以使用的专业软件或方法可以将这种强烈的处理卸载到哪里?我听说过sphinx search以及关于它的所有好反馈,但我相信它只对文本搜索有用吗?我的查询更多的是通过id和计算百分比来加入字段。

1 个答案:

答案 0 :(得分:0)

如果使用查询缓存,则不必是服务器密集型的。只需看看这个文档: http://dev.mysql.com/doc/refman/5.5/en/query-cache.html

当您启用查询缓存时,它将返回相同的结果(如果数据未更改),而不会反复进行搜索。