Optimierung der Aktienkursdatenbank in MySQL

7

Ich lade einen Großteil der Bestandsdaten herunter:

Tickersymbol, Firmenname, Branche,

Öffnen, hoch, niedrig, schließen

Ich habe mich in Bezug auf die Leistung gefragt, ob die Trennung von Ticker, Firmenname und Branche von den Preisdaten optimal wäre, da sich das Tickersymbol und der Firmenname immer wieder wiederholen.

Oder wäre der innere Beitritt zum Ticker + Preis jedes Mal langsamer?

Damit:

  • einzelne Tabelle (Ticker / Preis) oder
  • zwei Tabellen (Ticker) (Preis)?
user3003451
quelle
1
Wahrscheinlich geeignet für Datenbankadministratoren
hjpotter92
1
Ich denke tatsächlich, dass dies eine legitime Frage für SO ist, da es sich um Datenbankdesign handelt, was hier ein allgemeines Thema ist.
Phil Sandler
Was ist die Quelle?
Munchi

Antworten:

3

Das Speichern der Daten in einer Tabelle ist nicht unbedingt schneller. Wenn Sie den Firmennamen und die Branche aus der Tabelle entfernen, wird jede Zeile kleiner. Kleinere Zeilen bedeuten mehr Zeilen pro Datenseite. Und das bedeutet weniger Datenseiten.

Es kann vorkommen, dass die Zeilen mit dem Firmennamen größer als der Speicher sind. Aber die Seiten ohne den Firmennamen würden in den Speicher passen. Die letztere Situation führt eindeutig zu schnelleren Abfragen.

Um jedoch überhaupt Fragen zur Leistung beantworten zu können, sind Informationen zu den Arten der ausgeführten Abfragen erforderlich. Dadurch werden nicht nur die Tabellenstruktur, sondern auch die möglicherweise erforderlichen Indizes und Datentypen informiert.

Gordon Linoff
quelle
2

Wenn Geschwindigkeit Ihr einziges Anliegen ist und die Daten nur zum Lesen (nicht zum Aktualisieren / Erstellen) bestimmt sind: Wenn alle anderen Dinge gleich sind, wird das Speichern aller Daten in einer Tabelle schneller.

Wenn Sie es in separaten Tabellen speichern, wird es "normalisiert" ( Normalisierung ) gespeichert, und wenn Sie es in einer Tabelle speichern, wird es "denormalisiert" ( Denormalisierung ) gespeichert.

Phil Sandler
quelle
2

Rückseite der Umschlagberechnung:

  • MySQL Ints benötigen 4 Byes

  • Ein Börsentickersymbol besteht aus 3-5 Bytes. (Ich vermute?) Wenn Sie "CHAR (5)" ausführen, benötigt jedes Symbol 5 Bytes.

Mit 4 gegen 5 Bytes sehen Sie also keinen großen Unterschied. Wenn jedoch einige Ihrer Aktien länger sind, sollten Sie VARCHAR verwenden, und es ist etwas weniger leistungsfähig.

Wenn Sie mit 2 Tabellen arbeiten, ist das Einfügen langsamer, da in einer Tabelle nachgeschlagen werden muss, bevor in die andere Tabelle eingefügt wird. Die Verknüpfungen werden etwas langsamer sein.

Wenn Sie sich jedoch mehr als alles andere um die Leistung kümmern, können Sie jederzeit die gesamte Bestands-ID-Zuordnungstabelle auf Ihrem Client zwischenspeichern. Bei Abfragen handelt es sich dann überhaupt nicht um Joins.

Um Ihre Frage wirklich zu beantworten, müssen Sie genau wissen, welche Abfragen Sie benötigen und wie häufig sie sind, und sie dann in verschiedenen Szenarien testen.

BraveNewCurrency
quelle