2012-02-01 40 views
15

Tôi có bảng này trong phiên bản SQL Server 2008 R2 mà tôi có một quá trình được lên lịch chạy hàng đêm so với nó. Bảng có thể có tới 500K bản ghi trong đó tại bất kỳ thời điểm nào. Sau khi xử lý bảng này tôi cần phải loại bỏ tất cả các hàng từ nó vì vậy tôi tự hỏi mà các phương pháp sau sẽ tạo ra chi phí tối thiểu (tức là quá mức mục Transaction Log):Cắt xén hoặc thả và tạo bảng

  1. Truncate Table
  2. Drop và tạo bàn

Xóa nội dung của bảng đã hết do thời gian và các mục nhập nhật ký Giao dịch bổ sung.

Sự đồng thuận dường như là cắt xén, cảm ơn tất cả mọi người!

+4

[Một số so sánh giữa lượng đăng nhập tại đây] (http://dba.stackexchange.com/a/7685/3690). 'TRUNCATE' có ít ghi nhật ký hơn' DROP' khi thả cũng khiến các hàng liên quan cho đối tượng đó bị xóa khỏi bảng hệ thống (cũng được ghi lại) –

Trả lời

8

Cắt ngắn bảng sẽ không để lại các mục nhập theo từng hàng trong nhật ký giao dịch - vì vậy không có giải pháp nào sẽ làm lộn xộn quá nhiều nhật ký của bạn. Nếu đó là tôi, tôi sẽ cắt ngắn việc phải bỏ và tạo ra mỗi lần.

13

TRUNCATE TABLE là đặt cược tốt nhất của bạn. Từ MSDN:

Xóa tất cả các hàng khỏi bảng mà không đăng nhập từng hàng xóa.

Điều đó có nghĩa là nó sẽ không làm sưng lên nhật ký giao dịch của bạn. Việc bỏ và tạo bảng không chỉ đòi hỏi SQL phức tạp hơn mà còn có các quyền bổ sung. Bất kỳ cài đặt nào được đính kèm vào bảng (trình kích hoạt, GRANT hoặc DENY, v.v.) cũng sẽ phải được xây dựng lại.

5

Tôi sẽ truy cập BẢNG TRUNCATE. Bạn có thể có khả năng có overheads khi chỉ số, gây nên, vv được giảm xuống. Ngoài ra, bạn sẽ mất quyền truy cập cũng sẽ phải được tạo lại cùng với bất kỳ đối tượng bắt buộc nào khác cần thiết cho bảng đó.

Cũng trong ngày DROP TABLE trong MDSN bên dưới nó đề cập đến một chút Gotcha nếu bạn thực hiện thả và CREATE TABLE trong cùng một nhóm

DROP TABLE và CREATE TABLE không nên được thực hiện trên cùng một bảng trong cùng một nhóm . Nếu không, một lỗi không mong muốn có thể xảy ra.

2

Rời bảng sẽ hủy mọi đối tượng liên quan (chỉ mục, trình kích hoạt) và có thể thực hiện các quy trình hoặc lượt xem không hợp lệ. Tôi sẽ đi với truncate, vì nó sẽ không thổi lên đăng nhập của bạn và gây ra không có vấn đề có thể một giọt và tạo ra không.

+0

Cảm ơn, không có bất kỳ chỉ mục hoặc trình kích hoạt liên quan nào, tôi chỉ lo lắng về nhật ký giao dịch phát triển quá lớn. –

+0

Tôi đã học được điều này một cách khó khăn khi tôi bắt đầu thêm các thuộc tính mở rộng vào các bảng của mình, và vì các kịch bản t-sql của tôi đã sử dụng drop-and-create, tôi phải nhập lại các thuộc tính mở rộng và thay đổi các kịch bản để cắt bớt. Không có tài sản mở rộng bị mất sau đó. –

Các vấn đề liên quan