国产探花免费观看_亚洲丰满少妇自慰呻吟_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操作,

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 徐闻县| 双城市| 尉犁县| 抚顺县| 鄱阳县| 秦皇岛市| 星座| 奉新县| 神农架林区| 曲阳县| 额济纳旗| 景宁| 大厂| 游戏| 丹寨县| 建始县| 新安县| 南平市| 伊金霍洛旗| 栾城县| 宜丰县| 玉门市| 洪雅县| 凤阳县| 宕昌县| 石景山区| 韩城市| 海晏县| 灵川县| 台北县| 广宗县| 柞水县| 玉龙| 江口县| 开江县| 临桂县| 修文县| 灵石县| 上饶市| 海宁市| 三亚市|