Tôi có một bảng chứa các mục nhập nhật ký cho một chương trình tôi đang viết. Tôi đang tìm kiếm ý tưởng về một truy vấn SQL (Tôi đang sử dụng SQL Server Express 2005) sẽ giữ số lượng bản ghi X mới nhất và xóa phần còn lại. Tôi có một cột datetime là một dấu thời gian cho mục nhập nhật ký.Truy vấn SQL để xóa các hàng cũ nhất trên một số hàng nhất định?
Tôi tìm một số thứ như sau sẽ hoạt động, nhưng tôi không chắc chắn về hiệu suất với mệnh đề IN cho số lượng bản ghi lớn hơn. Hiệu suất không quan trọng, nhưng tôi cũng có thể làm tốt nhất lần đầu tiên.
DELETE FROM MyTable WHERE PrimaryKey NOT IN
(SELECT TOP 10,000 PrimaryKey FROM MyTable ORDER BY TimeStamp DESC)
Tôi nên đề cập truy vấn này sẽ chạy 3-4 lần một ngày (như một phần của quá trình khác), vì vậy số lượng hồ sơ sẽ bị xóa với mỗi truy vấn sẽ nhỏ so với số lượng hồ sơ sẽ được lưu giữ.
Các bạn đã thử nó? Nó có hoạt động không?NẾU nó không quan trọng, và những gì bạn đã làm việc, là khá rõ ràng những gì đang xảy ra, và là "đủ nhanh" đi với nó. – Nate
Chưa thử, nhưng nó sẽ hoạt động. Tôi thừa nhận tôi có tội về việc tối ưu hóa, đó là một thói quen xấu. –