我的查询需要几分钟才能运行。我以为我可以让它以四个单独的查询运行得更快,然后是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所要做的就是执行四个查询,然后连接结果。
编辑:我想我没有问过我真正追求的是什么:一种让这个查询快速运行的方法。
答案 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。