熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL語言 >> 正文

實踐證明在數據庫中使用游標效果會更好

2013-11-13 12:35:55  來源: SQL語言 

  在數據庫中有兩個表一個比較巨大大約千萬條記錄(表Big)另一個只有條(表small)

  目前需要根據表small來更新表Big

  UPDATE Big SET Bf= WHERE BigId IN(SELECT BigId FROM Small WHERE Sf>)

  但是這樣執行下來速度非常慢並且連接使用這台DB服務器的程序也都慢了下來幾近不可用

  仔細分析這條SQL語句使用了IN有人說IN是會分拆成一個個OR表達式的而OR語句將不會使用索引所以有時候遇到OR會用UNION ALL來代替

  但在這裡用UNION ALL是不行的

  根據筆者的猜想這條SQL語句大概會用上全表搜索大表千萬條記錄那麼至少比較千萬次怎麼會不慢呢

  於是選擇改用游標先將小表的記錄提取出來然後一條條的跟大表結合執行

  DECLARE curT CURSOR FOR SELECT BigId FROM Small WHERE Sf>;
  DECLARE @Id INT;
  OPEN curT;
  FETCH NEXT FROM curT INTO @Id;
  WHILE @@FETCH_STATUS =
  BEGIN
  UPDATE Big SET Bf= WHERE BigId=@BigId;
  FETCH NEXT FROM curT INTO @Id;
  END
  CLOSE curT;
  DEALLOCATE curT;

  這樣游標裡的記錄數量最多也只會有BidId在大表裡又有索引分成次執行雖然在連接編譯時花了一些時間但與恐怖的巨大表全表搜索比較是微乎其微

  實踐證明上面的語句在大約分鐘執行完畢在此期間使用此數據庫的應用程序不受影響速度同樣很快


From:http://tw.wingwit.com/Article/program/SQL/201311/16209.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.