我正在编写一个包含大型数据库的大脚本,对于每个页面,我应该执行一个联合所有查询:
(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,但似乎没有任何工作。 有人可以提供帮助吗? 感谢。
答案 0 :(得分:0)
一些缓存怎么样?至少通过nshares和id desc排序的前两个内部查询可以缓存到临时表中。每分钟用cronjob更新一次。