2011-06-20 31 views

Trả lời

14

Ngoài các điểm phạt JNK có trong câu trả lời của họ, một kẻ giết người cụ thể mà tôi đã thấy là khi bạn xóa các hàng khỏi bảng được tham chiếu cho một hoặc nhiều ràng buộc khóa ngoài và (các) cột tham chiếu trong (các) bảng tham chiếu không được lập chỉ mục - bạn đang buộc phải quét bảng trên từng bảng đó để xảy ra trước khi xóa có thể được chấp nhận.

+1

Vấn đề là chỉ mục trên các bảng có liên quan không có chỉ mục trên khóa ngoại. Điều đó làm cho việc xóa chậm. Đã tạo các chỉ mục trên tất cả các bảng có liên quan cho cột khóa ngoài và xóa mất 0 giây. –

+0

Yup, việc thêm chỉ mục tạo ra tất cả sự khác biệt với vấn đề của chúng tôi. Nhưng, trớ trêu thay, vì vậy chỉ đơn giản là chạy "UPDATE STATISTICS [tableName]". Đáng thử. –

7

Điều này sẽ phụ thuộc vào rất nhiều yếu tố mà bạn không nói với chúng tôi về ...

Có bao nhiêu hàng được xóa? Hàng khác rõ ràng có nghĩa là có nhiều thời gian hơn.

Có các chỉ mục khác không? Mọi chỉ mục cần được cập nhật, không chỉ nhóm. Nếu bạn đang xóa thông qua 10 chỉ mục, nó sẽ mất khoảng 10 x dài (rất gần).

Có hoạt động nào khác không? Nếu có cập nhật hoặc chèn xảy ra có rất có khả năng chờ đợi và tranh chấp.

Cũng nói chung, số giây hoạt động mất là HIGHLY phụ thuộc vào thiết lập phần cứng của bạn. Nếu bạn chạy điều này trên một máy tính để bàn so với một máy chủ với một mảng hiệu suất cao và 12 lõi, kỳ vọng sẽ rất khác nhau.

+2

Đừng quên trình kích hoạt ... – gbn

0

Cũng thử xóa dữ liệu theo lô. Ví dụ

set rowcount 10000 
delete [table] where id = ? 
while @@rowcount >0 
begin 
delete [table] where id = ? 
end 
+1

Điều này cải thiện sự tương tranh bằng cách giảm thời gian khóa và tranh chấp cho bảng/chỉ mục. Nó có lẽ không cải thiện hiệu suất mặc dù. – Yuck

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