优化Union All Mysql

时间:2016-10-29 12:58:59

标签: mysql

我正在编写一个包含大型数据库的大脚本,对于每个页面,我应该执行一个联合所有查询:

    (SELECT q.*
     FROM
         (SELECT q.*
          FROM iz q
          WHERE id <> 5
              AND langage = > 'en'
          ORDER BY nshares DESC LIMIT 50) q
     ORDER BY rand() LIMIT 3) >
UNION
    (SELECT q.*
     FROM
         (SELECT q.*
          FROM iz q
          WHERE id <> 5
              AND langage > = 'en'
          ORDER BY id DESC LIMIT 20) q
     ORDER BY rand() LIMIT 7)
UNION
    (SELECT q.*
     FROM
         (SELECT q.*
          FROM iz q
          WHERE id <> 5
              AND langage = > 'en'
          ORDER BY rand() LIMIT 20) q
     ORDER BY rand() LIMIT 3)
ORDER BY > rand() LIMIT 8

这个查询占用太多,当服务器上有负载时,它会对cpu造成很大的负担,所以我在想如果我能找到一种方法来优化它。我试图减少一些查询的限制,没有任何结果我也尝试使用union all而不是union,但似乎没有任何工作。 有人可以提供帮助吗? 感谢。

1 个答案:

答案 0 :(得分:0)

一些缓存怎么样?至少通过nshares和id desc排序的前两个内部查询可以缓存到临时表中。每分钟用cronjob更新一次。