1: 什么時候用union和union all ?
我們經常會碰到這樣的應用,兩個表的數據按照一定的查詢條件查詢出來以后,需要將結果合並到一起顯示出來,這個時候
就需要用到union和union all關鍵字來實現這樣的功能,union和union all的主要區別是union all是把結果集直接合並在一起,而
union 是將union all后的結果鏡像一次distinct,去除重復的記錄后的結果。
看下面的例子:
查詢一:
查詢二:
兩個結果集進行union all為(直接將兩個查詢結果集合並):
兩個結果集鏡像union 運算結果為(兩個結果集合並后進行去重/distinct):
總結: 在xwwd項目中由於還款計划表(tb_laon_repayment)數據量巨大(數量2000萬),
查詢一條借款的還款計划時候巨慢,當時為了解決查詢慢問題就建立了一張還款計划
備份表(tb_loan_repayment_his),將還款計划表tb_loan_repayment中的已經結清
的借款的還款計划數據導出1000萬到了還款計划備份表tb_loan_repayment_his中,
這樣做解決了還款計划表tb_loan_repayment中數據過大導致查看借款loan詳情時展示
查詢該筆借款loan的還款計划查詢卡死的情況。 后來由於項目需要需要查詢備份表中的數據,
於是對內管查看借款詳情接口進行了優化升級。 獲取具體某一條還款計划的時候首先查詢
還款計划表tb_laon_repayment如果沒有再去查詢還款計划備份表tb_loan_repayment_his.
同時“借款管理”菜單中是去分頁查詢所有還款計划,為了數據完整性,
這里就采用了union聯合查詢tb_loan_repayment,和tb_tb_repayment_his表。