2016-09-21 19 views
0

2つのテーブルから2つのデータセットを明確に結合するより効率的な方法を見つける必要があります。データは、デフラグメント、圧縮、および索引付けされた2つの表に保持されます。索引もデフラグメントおよび圧縮されます。結果セットは、組合の前に既に制限されています。問題のコードのユニオンステートメントの効率的な代替方法

例:

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 [email protected] And [email protected] 
     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 [email protected] 
    ) As UnionTable 
    Order By last_name Asc, First_name Asc, entry_id Asc 

私は理想的には同じ結果を提供することができます別の方法を探しています。

  • のインデックスと上記の明確な (および変形をすべて
  • デュアル挿入テーブル変数に組合は異なる選択し、一時テーブルに明確な
  • デュアル挿入を選択し、[選択:私はすでに次のことを試してみました

パフォーマンスの問題を引き起こす不均衡な結合を認識していますが、この例ではこのクエリは常に均衡を保ってヒットします。

この問題については、お手数ですが、ありがとうございます。

答えて

0
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式を使用して以来、多くなるだろう単一のクエリでそれをやって、ほぼ正確に同じクエリを持っています。