使用 TRUNCATE TABLE 刪除所有行

          Posted on 2009-07-16 19:41 林光炎 閱讀(1481) 評(píng)論(0)  編輯  收藏 所屬分類: ORACLE
          SQL Server 2008 聯(lián)機(jī)叢書(2009 年 5 月)
          使用 TRUNCATE TABLE 刪除所有行

          若要?jiǎng)h除表中的所有行,則 TRUNCATE TABLE 語(yǔ)句是一種快速、有效的方法。TRUNCATE TABLE 與不含 WHERE 子句的 DELETE 語(yǔ)句類似。但是,TRUNCATE TABLE 速度更快,并且使用更少的系統(tǒng)資源和事務(wù)日志資源。

          與 DELETE 語(yǔ)句相比,TRUNCATE TABLE 具有以下優(yōu)點(diǎn):

          • 所用的事務(wù)日志空間較少。
            DELETE 語(yǔ)句每次刪除一行,并在事務(wù)日志中為所刪除的每行記錄一個(gè)項(xiàng)。TRUNCATE TABLE 通過釋放用于存儲(chǔ)表數(shù)據(jù)的數(shù)據(jù)頁(yè)來(lái)刪除數(shù)據(jù),并且在事務(wù)日志中只記錄頁(yè)釋放。
          • 使用的鎖通常較少。
            當(dāng)使用行鎖執(zhí)行 DELETE 語(yǔ)句時(shí),將鎖定表中各行以便刪除。TRUNCATE TABLE 始終鎖定表和頁(yè),而不是鎖定各行。
          • 如無(wú)例外,在表中不會(huì)留有任何頁(yè)。
            執(zhí)行 DELETE 語(yǔ)句后,表仍會(huì)包含空頁(yè)。例如,必須至少使用一個(gè)排他 (LCK_M_X) 表鎖,才能釋放堆中的空表。如果執(zhí)行刪除操作時(shí)沒有使用表鎖,表(堆)中將包含許多空頁(yè)。對(duì)于索引,刪除操作會(huì)留下一些空頁(yè),盡管這些頁(yè)會(huì)通過后臺(tái)清除進(jìn)程迅速釋放。

          與 DELETE 語(yǔ)句相同,使用 TRUNCATE TABLE 清空的表的定義與其索引和其他關(guān)聯(lián)對(duì)象一起保留在數(shù)據(jù)庫(kù)中。如果表中包含標(biāo)識(shí)列,該列的計(jì)數(shù)器將重置為該列定義的種子值。如果未定義種子,則使用默認(rèn)值 1。若要保留標(biāo)識(shí)計(jì)數(shù)器,請(qǐng)使用 DELETE。

           截?cái)啻笮捅?

          Microsoft SQL Server 引入一種功能,此功能可刪除或截?cái)喑^ 128 個(gè)區(qū)的表,而無(wú)需同時(shí)保留需要?jiǎng)h除的所有區(qū)的鎖。有關(guān)詳細(xì)信息,請(qǐng)參閱刪除并重新生成大型對(duì)象

           示例

          下面的示例刪除 JobCandidate 表中的所有數(shù)據(jù)。在 TRUNCATE TABLE 語(yǔ)句之前和之后使用 SELECT 語(yǔ)句來(lái)比較結(jié)果。

          USE AdventureWorks;
          GO
          SELECT COUNT(*) AS BeforeTruncateCount
          FROM HumanResources.JobCandidate;
          GO
          TRUNCATE TABLE HumanResources.JobCandidate;
          GO
          SELECT COUNT(*) AS AfterTruncateCount
          FROM HumanResources.JobCandidate;
          GO
          

          posts - 104, comments - 33, trackbacks - 0, articles - 0

          Copyright © 林光炎

          主站蜘蛛池模板: 芜湖市| 微山县| 博乐市| 南宁市| 赫章县| 晋江市| 清水县| 淮阳县| 遵义县| 承德县| 桦甸市| 瑞安市| 湛江市| 琼海市| 会东县| 普定县| 遂溪县| 常山县| 农安县| 裕民县| 阿坝县| 玉山县| 宣城市| 海淀区| 砚山县| 上虞市| 安西县| 陆丰市| 淳安县| 石棉县| 德州市| 克拉玛依市| 陵水| 文成县| 栾川县| 榆林市| 门头沟区| 滨海县| 吉安市| 民县| 宁化县|