Wie man am besten eine partielle Textes entsprechen in SQL Server 2008
Habe ich eine große (1 TB) - Tabelle in SQL Server 2008, die wie folgt aussieht:
ID int | Flag BIT | Notes NTEXT
Ich suchen müssen jeder Zeile und legen Sie die Flag
bit auf 1, wo Noten enthält das Wort flip
Ist
UPDATE Table SET Flag = 1
WHERE Notes LIKE '%flip%'
dem 'besten' Weg, es zu tun?
Ich denke, das könnte Tage dauern, um zu laufen, auf einem so großen Tisch. Ich habe versucht, läuft eine
SELECT TOP (10) * FROM Table
WHERE Notes LIKE '%flip%'
und es läuft immer noch nach 10 Minuten - also performance ist nicht gut.
Wäre das erstellen einer C# - app zum Lesen/aktualisieren jede Zeile eine bessere Methode. Wenigstens konnte ich dann die änderung in bits ohne das sperren der Tabelle für die Tage.
Gibt es andere Methoden, die ich in Betracht ziehen sollte?
- Beachten Sie, dass die Volltext-Indizierung nicht helfen, für suffix-oder mid-term-Muster-matching, wie Sie sind, die Angabe hier (ie Führenden wildcard-Begriff suchen). stackoverflow.com/questions/1758393/...
- Sie könnten auch beachten Sie, dass ntext veraltet ist, müssen Sie ändern das Feld Definition in nvarchar(max).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde empfehlen, läuft ein wählen Sie, wie Sie oben (ohne die top-10-Ziffer) zu ziehen, die IDs der Datensätze, die Sie aktualisieren möchten (vorausgesetzt, Id ist indiziert) in ein temporäres staging-Tabelle. Wählen Sie Ihr scan wird die gesamte Tabelle, aber das ist besser, als dies innerhalb einer update-Anweisung. Wenn Sie Gebrauch machen können,Read Committed Snapshot-Isolation, dass wird noch besser für die Parallelität. Wenn Sie brauchen, um eine looping-Methode, dh die Prüfung einer kleinen Gruppe von Datensätzen iterativ, verwenden Sie die ID (oder einige seekable Spalte) als Ihre primäre filter zu bekommen, ein Stück der Datensätze, die auf Muster passen, und weiter, bis beendet. Dh so etwas wie dieses:
Dann weiter Durchlaufen, bis Sie schlagen Sie alle die ID-Bereiche.
Dann, wenn Sie die IDs zu aktualisieren, führen Sie das update gegen diese statt.
Wie sagt Dmitry, top 10 wählt, wird trotzdem Scannen der gesamten Tabelle für diese Art der Abfrage, so dass wird einfach langsam nach unten. Sobald Sie die IDs, oder etwas, das würde eine Abfrage machen seekable, könnte man dann eine top x Klausel zur Verringerung der Parallelität Auswirkung, aber das wird wahrscheinlich nur sinnvoll sein, wenn Sie eine sehr große Anzahl von Datensätzen zu beeinflussen.
Haben Sie versucht,die Volltext-Indizierung ?