MySQL中使用UNION进行两表合并,去重导致效率低下,请问如何优化?
如下SQL语句在MySQL中执行需要2秒左右的时间,如果使用UNION ALL进行不去重合并只需要0.4秒,UNION ALL配合DISTINCT来去重速度又变成2秒了,请问如何进行优化?
SELECT
a. KEY,
a. DATA,
a.date_added
FROM
(
(
SELECT
CONCAT('customer_', ca. KEY) AS `key`,
ca. DATA,
ca.date_added
FROM
`cf_customer_activity` ca
)
UNION
(
SELECT
CONCAT('affiliate_', aa. KEY) AS `key`,
aa. DATA,
aa.date_added
FROM
`cf_affiliate_activity` aa
)
) a
ORDER BY
a.date_added DESC
LIMIT 0,
5;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
看你写的语句key前缀不一样永远不会有重复啊,直接union all
@prolifes 是对的。也许题主没表述清楚。
我补充另外一个思路,因为你最后只需要5条数据,从ca中取5条,再从aa中取5条,总共10条排序,这个会很快。
当然先是使用QEP
至于每个字段的具体含义,自己查资料。
这个语句不是这样写就可以了吗?要distinct就去相应的子句distinct。order by 会给整个结果集排序,union 会对结果集自动去重,只是在这条语句里没有意义