Hallo Leute,
ich hoffe ihr könnt mir mal wieder weiterhelfen.
ich habe eine MSSQL 2000 Datenbank. in einer Tabelle sind momentan ca. 3,6 Mio Datensätze.
sie ist wie folgt aufgebaut:
RepID; RepString
RepID ist eine fortlaufende ID Nummer, und in RepString befindet sich ein SQL Statement.
ich möchte mir nun eine Funktion in C# (.Net 1.1) schreiben, welche jedes einzelne SQL Statement feuert und dieses anschließend löscht. das ist an sich gar kein Problem. nur beim löschen tut sich das Programm, bzw. der SQL Server sehr schwer. es kommt dann zu einem Timeout. wie muss so eine Funktion aussehen, wenn man mit so "riesigen" Datenbanken arbeitet?
Danke schon mal im Voraus,
David
Programming is like sex: One mistake and
you have to support it your lifetime
Wie sieht denn dein jetziger Code aus? Wie führst du den Lösch-Vorgang durch?
.NET GUI - Die Community für grafische Oberflächen unter .NET
Jetzt kostenlos besorgen: .NET BlogBook
Norbert Eder
DasBackup
ich feuere einfach ein delete SQL Statement ab. delete from RepTable where RepID = XXX
auch wenn ich die ganze tabelle in ein Datatable packe, tut sich das Programm sehr schwer.
Programming is like sex: One mistake and
you have to support it your lifetime
Löschen ist wohl eine der Operationen die am längsten dauert.
Füge doch eine Spalte "Deleted" hinzu und setze die auf True.
Wenn Du alles abgearbeitet hast dann kannst Du alle Datensätze auf einmal löschen, das geht sicher schneller.
Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
hallo david.ka,
Verwendest du Indizes auf den Schlüsselfeldern?
Existieren Beziehungen zu anderen Tabellen?
Hast Du bereits versucht den TimeOut höher zu setzen?
Arbeitest du mit Transaktionen?
Verwendest du einen direkten DeleteCommand, oder arbeitest du über DataTable?
-yellow
Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).
Mein Blog: Yellow's Blog auf sqlgut.de
Ergänzung zu Yellow's Post
Verwendest Du einen PrimaryKey ?
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
hallo,
nein nichts von dem. nichteinmal nen primary key.
timeout habe ich auch nicht höher gesetzt. macht aber keinen sinn, ich meine wenn es bei jedem löschen über 60sec dauert...
arbeite mit datatables
Programming is like sex: One mistake and
you have to support it your lifetime
Dann mach mal schnell einen Key rein und dann sollte das Teil fliegen...
Was sind schon ein paar Millionen Records
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
Wenn das nicht ein absolut klassischer Fall für eine Stored Procedure ist. Du willst doch nicht 3,6 Millionen Select + Delete + Statement aus Tabelle machen, oder? Das sind 10 Millionen Statements.
Stoß über C# eine Stored Procedure an und schreibe deren Output in eine temporäre Tabelle(die du dann via C# abfragst), wenn du Rückmeldung brauchst.
Sollte um Potenzen schneller sein, zumindest bei einfachen Statements. Außerdem kannst du es dann von dem C# Programm unabhängig aufrufen!
Grüße, Christoph
Wie Programmierhans schon geschrieben hat, nutze Indizes und das teil fluppt.
Gruß,
Tom
Original von svenson
Vor allem aber erstmal PKs definieren...
ich staune , daß es noch DBs ohne PK gibt ...
Original von CB.NET
ich staune , daß es noch DBs ohne PK gibt ...
Man kann auch mit dem Auto mit angezogener Handbremse rumfahren
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
Schlimmer, mit Handbremse (Index) und ohne auf die Strasse zu gucken (PK/FK). Du merkst nichtmal, dass du dich verfahren hast (inkonsistenten DS einfügst).
DB im Blindflug.
boah, DANKE, geht jetzt ab wie ein rotes Mofa 🙂
Programming is like sex: One mistake and
you have to support it your lifetime
Original von david.ka
boah, DANKE, geht jetzt ab wie ein rotes Mofa 🙂
Aber nun lass dich bloss nicht von den Bullen erwischen mit Deinem frisierten Mofa 😁
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
dafür bin ich jetzt zu schnell.
kann mir aber jemand was zu den Indizies erzählen? was machen die?
warum ist der PK so wichtig dafür?
Programming is like sex: One mistake and
you have to support it your lifetime
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
DANKE 🙂
Programming is like sex: One mistake and
you have to support it your lifetime