1. 程式人生 > 實用技巧 >apply 用法(1)-join比較

apply 用法(1)-join比較

apply包含 cross apply(對應inner join)和outer apply (對應 left join)

拿例項說明用法和效能比較 apply 兩種用法語法上相同下面僅用cross apply 舉例

TableA (id,buydate,client,gift,num ) id 自增列,gift禮品,num 數量,client 消費者,buydate 時間。現獲取消費者首日購買的最後一件禮品。

--寫法上 在這種涉及組內(一個client會有多條購買記錄,可以把client看做一個組)資料處理的情況,apply更簡潔明瞭。from後接組成員表,apply後接組成員資料明細表。

  --inner join用法

  --獲取首日
  select client,min(buydate) mindate into #mindate from TableA   group by client

  --獲取首日末次id
  select TableA .client,max(id)maxid into #maxid from TableA  
  inner join #mindate on TableA .client=#mindate.client
  where TableA .buydate=#mindate.mindate
  group by TableA .client

  
--獲取首日末次記錄 select TableA .* from TableA inner join #maxid on TableA .id=#maxid .maxid --cross apply 用法 --獲取首日 select client,min(buydate) mindate into #mindate from TableA group by client --獲取首日末次記錄 select t.* from #mindate cross apply (select top 1 * from TableA
where TableA.client=#mindate.client and TableA.buydate=#mindate.mindate order by id desc ) t

--效能上

實際業務中,不僅要考慮程式碼的簡潔還要考慮效能,最好的當然是既簡潔又高效。當組成員表數量較少,組成員資料明細表又較大時,apply效能更優(測試組成員表2W,組成員資料明細表5000W);當組成員數量較大時,join效能更優更穩定(測試組成員表400W,組成員資料明細表5000W)。

apply是對join的補充,在特定情況下要比join使用更簡潔高效,但不要盲目使用。