在UNION下,查询分别快速运行

时间:2011-04-28 20:44:06

标签: mysql

我的查询需要几分钟才能运行。我以为我可以让它以四个单独的查询运行得更快,然后是UNION。关于四个单独的查询部分,我至少是正确的。它们从最慢到最快运行~7秒,~1秒,&lt; 1秒。 1秒和<1秒1秒。

所以我认为所有这些中的UNION会以最慢的速度运行,大约7 + 1 + 1 + 1 = 10秒。但是,当我运行此UNION查询时,它需要超过100秒。

(select id from view_macatawa_prospect_match_first_and_last_name)
union
(select id from view_macatawa_prospect_match_full_name)
union
(select id from view_macatawa_prospect_match_just_address)
union 
(select id from view_macatawa_prospect_match_name_and_address)

为什么UNION会让这些变慢?在我看来,MySQL所要做的就是执行四个查询,然后连接结果。

编辑:我想我没有问过我真正追求的是什么:一种让这个查询快速运行的方法。

2 个答案:

答案 0 :(得分:2)

问题是union删除了重复项。所以它不仅仅是运行查询。

尝试使用union all代替union

这样,不会删除重复项:

(select id from view_macatawa_prospect_match_first_and_last_name)
union all
(select id from view_macatawa_prospect_match_full_name)
union all
(select id from view_macatawa_prospect_match_just_address)
union all
(select id from view_macatawa_prospect_match_name_and_address)

使用union all时,您应该更加接近单独运行查询时所获得的时间。

答案 1 :(得分:1)

改为使用'UNION ALL'

UNION尝试隐式应用'DISTINCT',这意味着您的结果不会有任何重复,因此减速。如果你不想要隐式DISTINCT,你可以使用UNION ALL。