亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Sql去重性能比較

Sql去重性能比較

哆啦的時光機 2018-12-06 12:08:04
表TB中,在gid為1和2中,要把souceid和type同時相同的找出來,只取一條 id souceid type gid 1?? s1 ????? t1?????? 1 2?? s1 ????? t1?????? 2 3?? s2 ????? t2?????? 1 4?? s2 ????? t2?????? 2 5?? s3?????? t3?????? 1 我了解的三種方法分別利用in、join、row_number 1.select * from TB where id in (select Max(id) from TB where gid in(1,2) group by souceid,type) 2.select * from TB A join (select Max(id) id from TB where gid in(1,2) group by souceid,type) B on A.id=B.id 3.select * from (select id,souceid,type,gid,row_number() over (partition by souceid,type order by id) as rn) A where A.rn=1 請高手指正,哪種方法最高效亦或是有更好的改進方法
查看完整描述

4 回答

?
眼眸繁星

TA貢獻1873條經驗 獲得超9個贊

3效率最高.似乎應該這樣寫.select * from (select id,souceid,type,gid,row_number() over (partition by souceid,type order by id) as rn from TB) A where A.rn=1

直接得出結果.

?

1,2 都分兩步進行,最后都涉及到聚合運算.

?

我的理解, 有不對的地方,歡迎指出.謝謝!

查看完整回答
反對 回復 2019-01-07
?
撒科打諢

TA貢獻1934條經驗 獲得超2個贊

不一定,話說分析函數挺費效率的.....在大數據量的時候

整體來看,效率最高的是2或3,數據量大的話應該是2;

gid in(1,2) ,改成 gid = 1 or gid = 2;

效率能高一點;

如果想效率最高的話,應該將其合并至一句:

很簡單, GID最好加上索引;如果數據一直是1,2+位圖索引;

查看完整回答
反對 回復 2019-01-07
?
UYOU

TA貢獻1878條經驗 獲得超4個贊

那請問怎么合并至一句呢
查看完整回答
反對 回復 2019-01-07
  • 4 回答
  • 0 關注
  • 517 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號