Um ein Problem zu beheben, habe ich eine einmalige Frage, ob ein bestimmtes varchar(max)Feld nicht druckbare ASCII-Zeichen (außer Leerzeichen) enthält. Das Folgende ist meine einfache Idee, wie ich feststellen kann, ob solche Zeichen in unserer Produktionsdatenbank gespeichert sind.
SELECT TOP 10 [CaseNoteId]
,[CaseId]
,[CaseNote]
FROM [DB].[XY].[ReferralCaseNotes]
WHERE CaseNote LIKE ('%[' + CHAR(1) + '-' + CHAR(8) + CHAR(11) + CHAR(12) + CHAR(14) + '-' + CHAR(31) + CHAR(127) + ']%')
Mein Zögern, dies tatsächlich auszuführen, rührt von der Verwendung von Platzhaltern im LIKE-Muster her, dass die betreffende Tabelle über eine Million Datensätze enthält, dass in dieser Spalte kein Volltextindex vorhanden ist und dass dies wahrscheinlich eine erschöpfende Suche sein wird, weil Wir glauben nicht, dass solche Charaktere existieren.
Ich bin ein Neuling. Wie kann ich abschätzen, ob das Ausführen dieser Abfrage eine erhebliche Belastung für unser Produktionssystem darstellt? Gibt es auch einen besseren Weg, um an die gleichen Informationen zu gelangen?
Mögliche Verbesserungen:
- Ich mache mir keine Sorgen, dass sich Daten ändern, während meine Abfrage ausgeführt wird. Kann ich diese Abfrage so ändern, dass mehrere Zeilen gleichzeitig auf vorteilhafte Weise angezeigt werden?
- Kann ich diese Abfrage so einstellen, dass sie eine Hintergrundoperation ist, die anderen Abfragen nicht im Wege steht?
- Kann ich es für eine begrenzte Zeit ausführen und bestimmen, wie viel Prozent der Tabelle durchsucht wurden, damit ich die für eine vollständige Suche erforderliche Zeit abschätzen kann?
- Würde
WITH(READPAST)meine Leistung verbessern?
Warum?
Die fragliche Datenbank umfasst vertrauliche Daten, die Regierung und Sicherheitsleute, die Regeln festlegen. Das Wiederherstellen eines Backups auf einem anderen Server ist sehr sinnvoll, würde den Steuerzahler jedoch mehrere Größenordnungen mehr kosten als sinnvoll.
Wenn die Antwort lautet: "Mach dir keine Sorgen, du machst nur eine AUSWAHL", dann sage ich: "Großartig!"