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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 冷水江市| 新郑市| 乌审旗| 安泽县| 罗定市| 左贡县| 井研县| 尚志市| 台南县| 尚志市| 海南省| 长岛县| 沾益县| 乐亭县| 庄河市| 桐城市| 濮阳县| 惠东县| 康乐县| 石嘴山市| 聂拉木县| 双柏县| 崇阳县| 乐清市| 云和县| 苗栗市| 屏东县| 奉化市| 陕西省| 黄平县| 芮城县| 沭阳县| 吉首市| 武定县| 东城区| 河东区| 平塘县| 永新县| 威远县| 治县。| 吴江市|