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

首頁 > 開發 > 綜合 > 正文

SQL優化思考

2024-07-21 02:09:41
字體:
來源:轉載
供稿:網友
    初入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) t2
  
  where t1.x=t2.y;
  
  再說exists
  
  實際上exists相當于對outer table進行全表掃描,用從中檢索到的每一行與inner table做循環匹配輸出相應的符合條件的結果,其主要開銷是對outer table的全表掃描(full scan),而連接方式是nested loop方式。
  
  可以寫成
  
  select * from t1 where exists (select null from t2 where t2.y=t1.x);
  
  轉換成
  
  for cursor1 in (select * from t1)
  
  loop
  
  if (exists (select null from t2 where t2.y=cursor1.x))
  
  then
  
  返回匹配的記錄;
  
  end if;
  
  end loop;
  
  通過上面的解釋,現在很容易明白當t2數據量巨大且索引情況不好(大量重復值等),則不宜使用產生對t2的distinct檢索而導致系統開支巨大的in操作,反之當t1表數據量巨大(不受索引影響)而t2表數據較少且索引良好則不宜使用引起t1全表掃描的exists操作,

商業源碼熱門下載www.html.org.cn

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 洪江市| 高邮市| 华蓥市| 从化市| 井陉县| 平阳县| 镇康县| 庆城县| 石城县| 清远市| 泰宁县| 祁东县| 华阴市| 剑川县| 陆川县| 三门县| 原平市| 高阳县| 华宁县| 庐江县| 寻乌县| 左贡县| 浦东新区| 海原县| 汉川市| 安塞县| 镶黄旗| 武城县| 杨浦区| 土默特右旗| 尤溪县| 根河市| 霸州市| 绍兴市| 开远市| 五寨县| 高阳县| 卢龙县| 金昌市| 河池市| 乌鲁木齐市|