Mam tabelę, która zawiera wpisy dziennika dla programu, który piszę. Szukam pomysłów na zapytanie SQL (używam programu SQL Server Express 2005), który zachowa najnowszą liczbę rekordów X i usunie pozostałe. Mam kolumnę datetime, która jest znacznikiem czasu dla wpisu dziennika.Zapytanie SQL do usuwania najstarszych wierszy powyżej pewnej liczby wierszy?
Myślę, że coś takiego działa, ale nie jestem pewien wydajności z klauzulą IN dla większej liczby rekordów. Wydajność nie jest krytyczna, ale równie dobrze mogę zrobić wszystko, co mogę za pierwszym razem.
DELETE FROM MyTable WHERE PrimaryKey NOT IN
(SELECT TOP 10,000 PrimaryKey FROM MyTable ORDER BY TimeStamp DESC)
należy wspomnieć, że ta kwerenda będzie działać 3-4 razy dziennie (jako część innego procesu), więc liczba rekordów, które zostaną usunięte z każdego zapytania będzie niewielki w porównaniu do liczby zapisy, które będą przechowywane.
Czy próbowałeś go? Czy to działa dobrze?JEŚLI nie jest to krytyczne i to, co robisz, jest dość oczywiste, co się dzieje i jest "wystarczająco szybkie". – Nate
Nie próbowałem, ale powinno działać. Przyznaję, że jestem winny nadmiernej optymalizacji, to zły nawyk. –