Eine Milliarde Zeilen mit einem Feld, das 100k ist, ist, gelinde gesagt, groß. Das kommt auf 100 Tbytes an Daten (unter Verwendung der amerikanischen Definition von "Terabyte"). Nach den documentation:
Die Speicher-Engine InnoDB hält InnoDB-Tabellen innerhalb einer Tabelle , die aus mehreren Dateien erstellt werden können. Dadurch kann eine Tabelle die maximale individuelle Dateigröße von überschreiten. Der Tablespace kann Raw Disk Partitionen enthalten, was extrem große Tabellen erlaubt. Die maximale Tablespace-Größe beträgt 64 TB.
Mit anderen Worten, Sie haben möglicherweise größere Probleme als die Leistung. Sie werden die Tabelle wahrscheinlich auf mehrere Partitionen verteilen.
Wenn Sie nur gelegentlich den Text abrufen und ihn nie für die Suche verwenden, würde ich vorschlagen, dass Sie ihn in einer separaten Tabelle speichern. Auf diese Weise können Sie diese Tabelle für den Zugriff auf diese Datensätze anpassen. Sie haben einen Primärschlüssel, der als Referenz verwendet wird, und alle Referenzen werden über diese ID geführt.
Wenn Sie den Text für Suchen verwenden, insbesondere für Suchen, die mit den "fixierten" Daten kombiniert werden, dann wäre es meine architektonische Präferenz, sie in die Basistabelle aufzunehmen, um die Suche über Felder zu erleichtern.
Aber selbst mit dieser Vorliebe ist es wahrscheinlich sicherer, sie in eine andere Tabelle zu stellen. Zum Beispiel instanziiert MySQL Unterabfragen. Es ist sehr typisch, *
für eine Unterabfrage zu verwenden.Betrachten wir einen einfachen Fall: Eine Anfrage, die 1000 letzten Aufzeichnungen von Benutzer-ID bestellt zu bekommen:
select t.*
from (select t.*
from t
order by createddate
limit 1000
) t
order by userid
Die Verwendung von t.*
bedeutet, dass die Textspalte ebenfalls abgerufen werden würde. Eine Abfrage, die einen Bruchteil einer Sekunde (mit einem Index) dauern könnte, müsste also mindestens 1000 * 100k = 100 Mbyte Daten lesen und schreiben. Das würde wahrscheinlich etwas länger dauern.
Zusammenfassend würde ich befürworten, die Textspalte in eine Tabelle zu stellen, wo sie oft mit anderen Spalten durchsucht wird - zum Beispiel in einer Datenbank mit Abstracts von wissenschaftlichen Arbeiten. Für wirklich große Daten würde ich es in ein separates Feld stellen, damit ich den Speicher in extremen Fällen besser verwalten kann.
Sie möchten sich den Textfeldern anschließen? –
Nun, wenn es nur ein Zeiger ist, dann denke ich, es ist besser, in der gleichen Tabelle zu sein. Solange Sie es nicht auswählen, glaube ich nicht, dass es Ihre Abfragen beeinflussen wird. und wenn Sie trennen, ist es nur mehr "sucht" nach der db zu tun, bevor Sie das Ergebnis geben. –
Keine Verbindung zu den Textfeldern, ich möchte mich einer Tabelle anschließen, die nur das Textfeld enthält. –