• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

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

    發布: 2008-5-15 15:22 | 作者: Alizze | 來源: 希賽網 | 查看: 50次 | 進入軟件測試論壇討論

    領測軟件測試網數據庫中有兩個表,一個比較巨大,大約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分鐘執行完畢,在此期間使用此數據庫的應用程序不受影響,速度同樣很快。

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    TAG: 實踐 數據庫 效果 游標


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>