我需要找到一种更有效的方法,该方法可以将两个表中的两组数据区别开来。保存在两个表中的数据均经过碎片整理,压缩和索引。其索引也会进行碎片整理和压缩。结果集在联合之前已经受到限制。
有问题的代码示例:
Select * From (
Select A.entry_id, First_name, last_name, Mobile_Phone, Email_Address, '1' As 'ownership'
From userAddressBook As A Join collectionMapping As B On A.entry_id=B.entry_id
Where A.UserID=@UserID And B.GroupNameID=@groupidentifier
Union
Select A.entry_id, First_name, last_name, Mobile_Phone, Email_Address, '0' As 'ownership'
From userAddressBook As A Join collectionMapping As B On A.entry_id=B.entry_id
Where A.UserID<>@UserID And B.GroupNameID=@groupidentifier
) As UnionTable
Order By last_name Asc, First_name Asc, entry_id Asc
理想情况下,我正在寻找一种可以提供相同结果的替代方法。我已经尝试了以下方法:
我知道不平衡的工会会导致性能问题,但是在这种情况下,此查询将始终处于平衡状态。
在此问题上的任何帮助将不胜感激,谢谢。
Select
A.entry_id
,First_name
,last_name
,Mobile_Phone
,Email_Address
,CASE WHEN A.UserId = @UserId THEN '1' ELSE '0' END As 'ownership'
From
userAddressBook As A
Join collectionMapping As B
On A.entry_id=B.entry_id
Where
B.GroupNameID = @groupidentifier
Order By
last_name Asc
,First_name Asc
,entry_id Asc
您几乎拥有完全相同的查询,使用CASE表达式,然后在单个查询中执行此操作将获得更多的效果。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句