2009-04-21 17 views
0

Gibt es Informationen darüber, wie SQL Server Zeichenfolgen vergleicht und die Suche in ihnen behandelt (z. B. Statements)? Ich versuche herauszufinden, ob es eine Möglichkeit gibt zu bestimmen, wie effizient es ist, Informationen als eine große Zeichenfolge zu speichern, und sql-Server zu verwenden, um eine Reihe von Vergleichen in Zeilen durchzuführen, um die Übereinstimmung zu bestimmen. Ich weiß, dass dies möglicherweise langsam sein wird (jede Informationskette würde 2400 Zeichen lang sein), aber ich brauche etwas, das zeigt, wie die Zeichenfolge verglichen wird, so dass ich die Effizienz (oder Ineffizienz) davon zeigen kann.Sql Server String Vergleich

+0

1. Planen Sie einen Volltextindex? 2. Haben Sie Zeitversuche mit dieser Art von Lösung unternommen? 3. Mit welchen Daten arbeiten Sie? Im Allgemeinen vermeiden wir LIKE-Anweisungen. Dieser Beitrag scheint anzuzeigen, dass dynamic sql möglicherweise besser ist als ein Volltextindex: http://social.msdn.microsoft.com/forums/de/sqldatabaseengine/thread/c8734672-837d-4e63-92e4-76c58a368251/ –

+0

was ist falsch mit wie? WHERE LastName wie 'Smi%' ist sargable und WHERE LEFT (LastName, 3) = 'Smi' ist nicht .... es ist absolut nichts falsch mit wie wenn Sie den Anfang einer Spalte suchen – SQLMenace

+0

Weil ich mir ziemlich sicher bin Eine ähnliche Anweisung funktioniert nicht gut, wenn nach einer 400 Zeichen langen Zeichenfolge in der Mitte des Feldes gesucht wird. – kemiller2002

Antwort

2

jede Kette von Informationen würden

Genau 2400 2400 Zeichen lang sein? Sie haben Felder mit fester Breite? Sparen Sie Zeit und teilen Sie sie einfach in separate Spalten auf. Du wirst dir später selbst danken.

Wenn Sie müssen Daten haben, richten Sie eine Test-DB und versuchen Sie es in beide Richtungen. Dann haben Sie mindestens Daten, die für Ihr System spezifisch sind.

+0

Aufgrund der Art der Daten kann ich das nicht tun. Ich dachte über diesen Ansatz nach, aber es würde mich zwingen, eine Reihe von Verkettungen zu machen, um den Gesamtwert der Daten zu bestimmen. Der 2400 ist im Wesentlichen ein großer Satz von Flags, die wir suchen müssten, um eine Reihe von gesetzten Flags in einer Reihe zu finden. Wirklich, was ich suche, sind Informationen, die besagen, dass dies wirklich ineffizient wäre. – kemiller2002

+0

Ich denke (KNOW!) Sie werden finden, dass die Aufspaltung der Zeichenfolge auf Insert wird viel schneller als es bei Suche oder Abruf austeilen. Grundregel des Datenbankentwurfs: 1 Spalte, 1 Wert. –

+0

Hier ist der Deal. Der dba möchte, dass jedes Zeichen 1 Minute Zeit darstellt. Ich muss suchen, um festzustellen, wie lange die verfügbare Zeitspanne ist. Aufzuspalten bedeutet, dass ich viel Arbeit aufwenden muss, um zu bestimmen, welche Werte sich anordnen, um herauszufinden, wie lang die Zeitspanne ist. Ich sage nicht, dass du falsch liegst, aber was ich brauche, sind genug Informationen, um zu zeigen, warum das eine schlechte Idee ist. Ich habe andere Datenstrukturen vor Augen, um das Problem anzugehen, aber ich muss seine Idee widerlegen, bevor ich meine eigene vorstellen kann. – kemiller2002

0

in ihnen suchen wird langsam sein, weil Sie nicht in der Lage sein, einen Index zu erstellen, da ein Index nicht mehr als 900 Bytes lang sein kann/breit

ich tun würde, was Joel Coehoorn schlägt vor, und teilen Sie es nach oben in Spalten

Sie es auch in mehreren Tabellen aufgeteilt möchten vielleicht, weil Sie nur 3 Zeilen mit 2.400 Zeichen pro Zeile pr Seite speichern kann

0

es gibt Volltextsuche Indizes, die Sie auf sQL Server anwenden können, die sind oft für Dinge wie Suchmaschinen verwendet. Die Volltextindizes ermöglichen normalerweise boolesche logische Operatoren für die Suche.

+0

Ich kenne niemanden, der SQL benutzt Server-Volltextindex als Back-End der Suchmaschine. Kennst du irgendwelche Beispiele? Die meisten Implementierungen, die mir bekannt sind, verwenden Lucene oder benutzerdefinierten Code für die Implementierung der Textsuche. –

+0

StackOverflow verwendet es. –

0

Nur zusätzliche Informationen zu den bereits erwähnten. Wenn Sie die große Zeichenfolge mit like filtern müssen, werden auch keine Indizes verwendet (außer der Platzhalter% steht nur am Ende der Suchzeichenfolge). Also ist es am besten zu vermeiden, wie und machen Sie den Teil, den Sie filtern müssen, um in einem eigenen Feld verfügbar zu sein.

0

In der MSDN Artikel über Volltextsuchen wird das folgende aufgerufen, wie das LIKE-Prädikat Zeichenmuster verwendet.

Vergleich LIKE zu Volltextsuche

Im Gegensatz zur Volltextsuche arbeitet das LIKE Transact-SQL-Prädikat auf Zeichenmuster nur. Außerdem können Sie das LIKE-Prädikat query formatierte Binärdaten nicht verwenden. Darüber hinaus ist eine LIKE-Abfrage gegen eine große Menge an unstrukturierten Textdaten viel langsamer als eine äquivalente Volltextabfrage gegen die gleichen Daten. Eine LIKE-Abfrage gegen Millionen von Zeilen von Textdaten kann Minuten dauern, um zurückzukehren; während eine Volltext-Abfrage kann nur Sekunden oder weniger gegen die gleichen Daten, abhängig auf die Anzahl der Zeilen, die zurückgegeben werden.