<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>杰趣网 &#187; MSSQL</title>
	<atom:link href="http://www.jackq.com/tag/mssql/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jackq.com</link>
	<description>IT info. Experience Sharing.</description>
	<lastBuildDate>Tue, 31 Jan 2012 09:48:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>TRUNCATE TABLE 与 DELECT 比较【摘于MSSQL 2005 MSDN】</title>
		<link>http://www.jackq.com/truncate-table-and-delect-compare-mssql-2005-msdn/</link>
		<comments>http://www.jackq.com/truncate-table-and-delect-compare-mssql-2005-msdn/#comments</comments>
		<pubDate>Sat, 16 Jan 2010 14:35:18 +0000</pubDate>
		<dc:creator>Jack</dc:creator>
				<category><![CDATA[技术应用]]></category>
		<category><![CDATA[MSSQL]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.jackq.com/?p=91</guid>
		<description><![CDATA[若要删除表中的所有行，则 TRUNCATE TABLE 语句是一种快速、无日志记录的方法。TRUNCATE TABLE 与不含有 WHERE 子句的 DELETE 语句在功能上相同。但是，TRUNCATE TABLE 速度更快，并且使用更少的系统资源和事务日志资源。 与 DELETE 语句相比，TRUNCATE TABLE 具有以下优点： 1.所用的事务日志空间较少。 DELETE 语句每次删除一行，并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放用于存储表数据的数据页来删除数据，并且在事务日志中只记录页释放。 [减少对日志的IO操作[对于采取简单策略的数据库更为有利]] 2.使用的锁通常较少。 当使用行锁执行 DELETE 语句时，将锁定表中各行以便删除。TRUNCATE TABLE 始终锁定表和页，而不是锁定各行。 [大粒度锁比小粒度锁消耗资源更少，效率更高] 如无例外，在表中不会留有任何页。 执行 DELETE 语句后，表仍会包含空页。例如，必须至少使用一个排他 (LCK_M_X) 表锁，才能释放堆中的空表。如果执行删除操作时没有使用表锁，表（堆）中将包含许多空页。对于索引，删除操作会留下一些空页【参见MODEL系统数据库以及创建新数据库相关联的部分资料】，尽管这些页会通过后台清除进程迅速释放。 与 DELETE 语句相同，使用 TRUNCATE TABLE 清空的表的定义与其索推渌亓韵笠黄鸨Ａ粼谑菘庵小? 截断大型表 Microsoft SQL Server 2005 引入一种功能，此功能可删除或截断超过 128 个扩展分区，而无需同时保留需要删除的所有扩展分区的锁的表。有关详细信息，请参阅删除并重新生成大型对象。 根据条件DELETE大容量表中的行： 注意： 这种方法跟在企业管理中直接删除数据导致的恶果相似，但稍微轻一点&#8230; 将丢失这张表、行、单元格所有的版本信息 操作： 1. 建立相同结构的结构的空表； 2. INSERT INTO TableNameCopy SELECT Column1, Column2,&#8230; &#8230; , ColumnN FROM TableName WHERE !删除条件 3. TRUNCATE TABLE TableName 4. DROP TABLE TableName 5. EXEC sp_rename &#8217;TableNameCop&#8217;, &#8217;TableName&#8217; sp_rename 慎用！切记！ SQL Server 2005 联机丛书 sp_rename (Transact-SQL) 注意：更改对象名的任一部分都可能破坏脚本和存储过程。我们建议您不要使用此语句来重命名存储过程、触发器、用户定义函数或视图；而是删除该对象，然后使用新名称重新创建该对]]></description>
			<content:encoded><![CDATA[<p>若要删除表中的所有行，则 TRUNCATE TABLE 语句是一种快速、无日志记录的方法。TRUNCATE TABLE 与不含有 WHERE 子句的 DELETE 语句在功能上相同。但是，TRUNCATE TABLE 速度更快，并且使用更少的系统资源和事务日志资源。</p>
<p><img class="aligncenter" src="http://www.jackq.com/imagehosting/images/sqlserver.jpg" alt="sqlserver" /></p>
<p>与 DELETE 语句相比，TRUNCATE TABLE 具有以下优点：<br />
<strong>1.所用的事务日志空间较少。</strong></p>
<p>DELETE 语句每次删除一行，并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放用于存储表数据的数据页来删除数据，并且在事务日志中只记录页释放。<br />
[减少对日志的IO操作[对于采取简单策略的数据库更为有利]]</p>
<p><strong>2.使用的锁通常较少。</strong></p>
<p>当使用行锁执行 DELETE 语句时，将锁定表中各行以便删除。TRUNCATE TABLE 始终锁定表和页，而不是锁定各行。<br />
[大粒度锁比小粒度锁消耗资源更少，效率更高]</p>
<p>如无例外，在表中不会留有任何页。</p>
<p>执行 DELETE 语句后，表仍会包含空页。例如，必须至少使用一个排他 (LCK_M_X) 表锁，才能释放堆中的空表。如果执行删除操作时没有使用表锁，表（堆）中将包含许多空页。对于索引，删除操作会留下一些空页【参见MODEL系统数据库以及创建新数据库相关联的部分资料】，尽管这些页会通过后台清除进程迅速释放。</p>
<p>与 DELETE 语句相同，使用 TRUNCATE TABLE 清空的表的定义与其索推渌亓韵笠黄鸨Ａ粼谑菘庵小?<br />
截断大型表<br />
Microsoft SQL Server 2005 引入一种功能，此功能可删除或截断超过 128 个扩展分区，而无需同时保留需要删除的所有扩展分区的锁的表。有关详细信息，请参阅删除并重新生成大型对象。</p>
<p>根据条件DELETE大容量表中的行：<br />
注意：<br />
这种方法跟在企业管理中直接删除数据导致的恶果相似，但稍微轻一点&#8230;<br />
将丢失这张表、行、单元格所有的版本信息<br />
操作：<br />
1. 建立相同结构的结构的空表；<br />
2. INSERT INTO TableNameCopy SELECT Column1, Column2,&#8230; &#8230; , ColumnN FROM TableName WHERE !删除条件<br />
3. TRUNCATE TABLE TableName<br />
4. DROP TABLE TableName<br />
5. EXEC sp_rename &#8217;TableNameCop&#8217;, &#8217;TableName&#8217;</p>
<p>sp_rename 慎用！切记！<br />
SQL Server 2005 联机丛书</p>
<p>sp_rename (Transact-SQL)<br />
注意：更改对象名的任一部分都可能破坏脚本和存储过程。我们建议您不要使用此语句来重命名存储过程、触发器、用户定义函数或视图；而是删除该对象，然后使用新名称重新创建该对</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jackq.com/truncate-table-and-delect-compare-mssql-2005-msdn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

