2011-04-28 379 views
2

我有一个查询需要几分钟才能运行。我想我可以让它运行得更快,因为四个单独的查询,然后UNION。我对这四个单独的查询部分至少是正确的。他们从最慢到最快跑,约7秒,约1秒,1秒012秒,<秒,<秒。查询运行速度很快,在UNION下缓慢运行

所以我会认为所有这些的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

问题是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你应该更贴近你时,单独运行的查询,你有什么时间。

+0

它仍然和'UNION ALL'一样慢。 – 2011-04-28 21:09:58

1

使用“UNION ALL”,而不是

UNION尝试应用“独特”含蓄,这意味着你的结果不会有任何重复因此放缓。如果你不想隐式的DISTINCT,你可以使用UNION ALL。

相关问题