国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

SQL優化思考

2024-07-21 02:40:04
字體:
來源:轉載
供稿:網友
初入Oracle殿堂的人,在學寫SQL語句時一般會得到一個教誨,那就是exists比in更要高效,但仔細想象要是真的這么簡單那干脆去掉in,豈不是省去很多麻煩?       自己對這兩種查詢語句寫法的熟悉也比較淺顯,但是覺得還是比較有效,所以有愛好的可以瞄一眼哦......先說IN他相當對inner table執行一個個帶有distinct的子查詢語句,然后得到的查詢結果集再與outer table進行連接,當然連接的方式和索引的使用仍然同于普通的兩表連接。select * from T1 where x in (select y from T2);可以轉換成如下select * from T1,(select distinct y from T2) T2where T1.x=T2.y;再說exists實際上exists相當于對outer table進行全表掃描,用從中檢索到的每一行與inner table做循環匹配輸出相應的符合條件的結果,其主要開銷是對outer table的全表掃描(full scan),而連接方式是nested loop方式??梢詫懗蓅elect * from T1 where exists (select NULL from T2 where T2.y=T1.x);轉換成for cursor1 in (select * from T1)loopif (exists (select NULL from T2 where T2.y=cursor1.x))then     返回匹配的記錄;end if;end loop;通過上面的解釋,現在很輕易明白當T2數據量巨大且索引情況不好(大量重復值等),則不宜使用產生對T2的distinct檢索而導致系統開支巨大的IN操作,反之當T1表數據量巨大(不受索引影響)而T2表數據較少且索引良好則不宜使用引起T1全表掃描的EXISTS操作,

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 酒泉市| 宝兴县| 河津市| 江西省| 陆良县| 克什克腾旗| 台中市| 黎川县| 祁连县| 马山县| 厦门市| 罗定市| 辽阳县| 南木林县| 东乌| 韩城市| 隆德县| 奉新县| 大姚县| 贵德县| 万州区| 嘉定区| 永年县| 太白县| 宜黄县| 崇州市| 安庆市| 五华县| 金昌市| 永安市| 宁海县| 桂林市| 禄丰县| 全南县| 金堂县| 北票市| 新泰市| 越西县| 台东市| 芮城县| 紫金县|