Thách thức @sjaan phản ứng
MSDN "TRUNCATE TABLE loại bỏ tất cả các hàng từ một bảng, nhưng cấu trúc bảng và các cột của nó, những hạn chế, chỉ số, và vân vân vẫn" đội SQL đang nói rằng chỉ số sẽ tồn tại nhưng không có trang dữ liệu ... Bạn có thể dễ dàng kiểm tra rằng với reference
Nếu bạn kiểm tra kích thước của các chỉ số trên bàn rằng nó sẽ không
SELECT *
FROM
(
SELECT OBJECT_NAME(i.OBJECT_ID) AS TableName,
i.name AS IndexName,
i.index_id AS IndexID,
8 * SUM(a.used_pages) AS 'Indexsize(KB)'
FROM sys.indexes AS i
JOIN sys.partitions AS p ON p.OBJECT_ID = i.OBJECT_ID
AND p.index_id = i.index_id
JOIN sys.allocation_units AS a ON a.container_id = p.partition_id
GROUP BY i.OBJECT_ID,
i.index_id,
i.name
) a
WHERE A.TableName LIKE '%table%'
ORDER BY Tablename,
indexid;
"TRUNCATE TABLE loại bỏ tất cả các hàng từ một bảng, nhưng cấu trúc bảng và các cột, các ràng buộc, các chỉ mục của nó vẫn giữ nguyên, bộ đếm được sử dụng bởi một danh tính cho các hàng mới được đặt lại thành hạt giống cho cột đó. Thay vào đó, sử dụng DELETE. Nếu bạn muốn loại bỏ định nghĩa bảng và dữ liệu của nó, hãy sử dụng câu lệnh DROP TABLE "từ http://msdn.microsoft.com/en-us/library/aa260621(v=sql.80).aspx. Nếu bạn cắt bớt bảng, sau đó chèn lại dữ liệu, sau khi chèn nó có thể có ý nghĩa nhất để xây dựng lại chỉ mục vì bạn có dữ liệu mới trong bảng. – Kprof
@Kprof Chúng tôi đã có tình huống apposite khi DELETE hàng tuần giết hiệu suất máy chủ cho đến khi xây dựng lại chỉ mục hoàn chỉnh, nhưng TRUNCATE hàng tuần giữ nó sạch sẽ trên MSSQL 2005 – alex