Angenommen, wir haben eine Datenbank mit 12 Millionen Namen und Adressen, die im Volltext durchsucht werden müssen, aber jede Zeile enthält beispielsweise auch einen ganzzahligen Wert COMPANYID
. Die Tabelle enthält rund 250 verschiedene COMPANYIDs in diesen 12 Millionen Zeilen.
Ist es möglich, bei der Definition der Volltextindizes jedem COMPANY
einen eigenen "Zweig" im Baum zuzuweisen?
company
, und alle mochten sie so sehr, dass ich sie für alle Unternehmen in Produktion bringen soll , und ich hatte keine Chance, ein Modell mit 12 Millionen aussagekräftigen Dummy-Datenzeilen zu erstellen noch. Werte wie "Nachname1", "Nachname2", "Stadt1" usw. variieren nicht ausreichend und können die Testergebnisse verzerren. Die Daten ändern sich so häufig, dass ich nicht sicher bin, ob SQL Server zuverlässig weiß, welcher Index in einer bestimmten Abfrage enger ist, und die Anzahl der Zeilen pro Unternehmen variiert stark. Ein Unternehmen hat möglicherweise nur 1000 Zeilen, ein weiteres 60.000.Antworten:
Nein ist die kurze Antwort, und das brauchen Sie nicht wirklich. Volltextindizes sind invertierte Indizes, sodass sie die geteilten Wörter anhand der eindeutigen doc_id speichern, die Sie beim Erstellen des Volltextindex angeben müssen. Dies muss eine "eindeutige, nicht nullbare Spalte mit einem Schlüssel" sein, idealerweise eine Ganzzahl. Was im Wesentlichen ein Fremdschlüssel ist, wird nicht dargestellt, und es gibt keine einfache Möglichkeit, sie auf dieser Basis zu partitionieren.
Sie könnten so etwas mit einer Tabelle pro Unternehmen und einem Volltextindex pro Tabelle fälschen. Sie benötigen eine Art Codelogik, die vor Ihnen steht, um zu bestimmen, in welche Tabelle Sie einfügen oder von welcher Sie abrufen möchten. Dies wäre ein erheblicher Kopfschmerz, der sich mit ziemlicher Sicherheit nicht lohnt.
Wenn Sie ein ernsthaftes Volumen hatten (z. B. mehr als 23 Milliarden Datensätze), können Sie sich eine Sharding-Lösung ansehen, z. B. eine Azure-VM pro Unternehmen, vor der sich eine App befindet, um zu bestimmen, mit welchem Computer eine Verbindung hergestellt werden soll. Aber das brauchst du natürlich auch nicht.
In SQL 2008 gab es auch eine Reihe von Verbesserungen gegenüber Volltext, der jetzt stärker in das Datenbankmodul integriert ist. Ein Szenario, in dem Sie eine WHERE-Klausel für eine normale Spalte angeben und die Volltextfunktionen verwenden, wird als "gemischte Abfrage" bezeichnet und hier erläutert . Dies ist immer noch ein großartiger Artikel, obwohl die Informationen für SQL 2008 sind.
Wenn Sie generell über Leistung und Pläne besorgt sind, können Sie einige Testdaten hochfahren, einen Versatz einführen und ausprobieren. Ich habe dieses Skript mit ~ 2 Millionen Zeilen in wenigen Minuten erstellt:
quelle