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

首頁 > 開發 > 綜合 > 正文

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

2024-07-21 02:42:43
字體:
來源:轉載
供稿:網友
在數據庫中有兩個表,一個比較巨大,大約1千萬條記錄(表Big),另一個只有5000條(表small)。

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

UPDATE Big SET Bf1=0 WHERE BigId IN(SELECT BigId FROM Small WHERE Sf1>0)

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

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

但在這里用UNION ALL是不行的。

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

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

DECLARE curT CURSOR FOR SELECT BigId FROM Small WHERE Sf1>0;

DECLARE @Id INT;

OPEN curT;

FETCH NEXT FROM curT INTO @Id;

WHILE @@FETCH_STATUS = 0

BEGIN

UPDATE Big SET Bf1=0 WHERE BigId=@BigId;

FETCH NEXT FROM curT INTO @Id;

END

CLOSE curT;

DEALLOCATE curT;

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

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 互助| 平原县| 高雄县| 鲜城| 涪陵区| 惠水县| 区。| 北流市| 通道| 五常市| 岳阳市| 西昌市| 望谟县| 大新县| 中牟县| 鸡西市| 太保市| 南丰县| 香港| 新疆| 临武县| 南江县| 雅江县| 维西| 龙南县| 昭苏县| 财经| 越西县| 垦利县| 顺昌县| 红桥区| 西平县| 射洪县| 荃湾区| 鞍山市| 诸城市| 庄浪县| 扶沟县| 汶上县| 兴城市| 宿州市|