国产探花免费观看_亚洲丰满少妇自慰呻吟_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分鐘執行完畢,在此期間使用此數據庫的應用程序不受影響,速度同樣很快。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 屯门区| 斗六市| 青铜峡市| 昭苏县| 庐江县| 新河县| 宿迁市| 华坪县| 阿克陶县| 康平县| 喀喇沁旗| 天等县| 鹿邑县| 长垣县| 西充县| 绥滨县| 油尖旺区| 资阳市| 如皋市| 晋中市| 甘孜县| 怀柔区| 托克托县| 梁平县| 汤阴县| 泊头市| 鄂尔多斯市| 霍州市| 永春县| 河南省| 金山区| 融水| 荆州市| 佛学| 绍兴市| 毕节市| 黄陵县| 将乐县| 潜山县| 黄平县| 庆云县|