Một tổ chức lại và thu nhỏ không bao giờ được khuyến khích thực sự.
Nếu bạn có thể lấy các ứng dụng mà cơ sở dữ liệu đang phục vụ ngoại tuyến, bạn có thể tăng tốc quá trình và giảm phân mảnh chỉ mục bằng cách xóa tất cả các chỉ mục và các ràng buộc khóa chính / ngoại khóa trước khi thu hẹp (điều này có nghĩa là sẽ có ít dữ liệu được di chuyển xung quanh vì chỉ có các trang dữ liệu sẽ được xáo trộn không phải là các trang chỉ mục hiện không tồn tại, tăng tốc quá trình) sau đó tạo lại tất cả các chỉ mục và khóa.
Tái tạo các chỉ mục sau khi thu nhỏ có nghĩa là chúng không bị phân mảnh đáng kể và việc chúng bị mất trong quá trình thu nhỏ có nghĩa là xây dựng lại chúng sẽ không để lại nhiều "lỗ hổng" nhỏ trong phân bổ trang trong các tệp có thể mời phân mảnh sau này.
Một tùy chọn khác nếu bạn có thể ngoại tuyến các ứng dụng là di chuyển tất cả dữ liệu sang cơ sở dữ liệu mới có cùng cấu trúc. Nếu quá trình xây dựng của bạn là vững chắc, bạn sẽ có thể xây dựng DB trống đó một cách nhanh chóng, nếu không tạo một DB từ DB hiện tại (khôi phục bản sao lưu của cái hiện tại, cắt / xóa tất cả nội dung trong các bảng và thực hiện thu nhỏ toàn bộ).
Bạn vẫn có thể muốn thả tất cả các chỉ mục vào đích và tạo lại chúng sau đó vì điều này có thể hiệu quả hơn rất nhiều khi thay đổi nhiều dữ liệu được lập chỉ mục (trong trường hợp này là 100%). Để tăng tốc quá trình sao chép, hãy đưa (các) cơ sở dữ liệu của cơ sở dữ liệu đích vào các ổ đĩa vật lý khác nhau vào nguồn (trừ khi bạn đang sử dụng SSD trong trường hợp bạn không cần quan tâm đến việc giảm chuyển động của đầu), bạn có thể di chuyển chúng đến vị trí nguồn khi bạn hoàn thành.
Ngoài ra, nếu tạo đích là mới (thay vì xóa một bản sao của nguồn), hãy tạo điểm đến với kích thước ban đầu sẽ chứa tất cả dữ liệu hiện tại cộng với một số tháng tăng trưởng - điều đó sẽ khiến dữ liệu sao chép nhanh hơn một chút nó sẽ không được phân bổ không gian mới mỗi lần trong suốt quá trình.
Điều này có thể tốt hơn so với sử dụng thu nhỏ vì di chuyển dữ liệu sang cơ sở dữ liệu mới sao chép hành động dự định của hoạt động thu nhỏ, nhưng có khả năng bị phân mảnh ít hơn (đó là hậu quả không lường trước của việc sắp xếp lại và thu nhỏ). Thu nhỏ chỉ đơn giản là lấy các khối từ gần cuối tệp và đặt chúng vào không gian đầu tiên gần đầu, không cần nỗ lực để giữ các dữ liệu liên quan với nhau.
Tôi nghi ngờ kết quả sẽ là không gian hiệu quả hơn vì có thể sẽ có ít trang được sử dụng một phần sau đó. Thu nhỏ sẽ chỉ di chuyển các trang được sử dụng một phần xung quanh, di chuyển dữ liệu có nhiều khả năng dẫn đến các trang đầy đủ đặc biệt là nếu bạn chèn vào đích theo thứ tự của khóa / chỉ mục được nhóm của bảng (trong đó một bảng có một) và tạo các chỉ mục khác sau khi dữ liệu đã di chuyển tất cả.
Tất nhiên, nếu bạn hoàn toàn không thể đưa các ứng dụng ngoại tuyến, chỉ cần thực hiện thu nhỏ là lựa chọn duy nhất của bạn, vì vậy nếu bạn thực sự cần phải lấy lại không gian thì hãy thực hiện điều đó. Tùy thuộc vào dữ liệu của bạn, các mẫu truy cập, kích thước tập làm việc chung, máy chủ có bao nhiêu RAM, v.v., sự phân mảnh bên trong có thể không đáng kể đến cuối cùng.
Đối với hoạt động sao chép, SSIS hoặc T-SQL cơ sở cũng sẽ hoạt động tốt (tùy chọn SSIS có thể kém hiệu quả hơn, nhưng có khả năng dễ dàng hơn để duy trì sau này). Nếu bạn tạo các mối quan hệ FK ở cuối cùng với các chỉ mục, bạn có thể thực hiện một "đơn giản cho mỗi bảng, sao chép" trong cả hai trường hợp. Tất nhiên đối với một lần, thu nhỏ + sắp xếp lại có lẽ cũng tốt nhưng tôi chỉ muốn làm mọi người sợ không bao giờ xem xét thu nhỏ thường xuyên! (Tôi đã biết mọi người lên lịch cho họ hàng ngày).