Mysql: Performance

sharmuur

Mitglied
Hallo,

ich habe eine Tabelle für MYSQL-Datenbank mit folgendem Struktur entworfen.
Date: Date
Time: Time
Code: smallint
level: smallint
miss: smallint
mean: double

Diese Tabelle soll ca. 17 Millionen Datensätze enthalten. Jezt mache ich mir Überlegung, wie der Performance
bei dieser Tabelle ist. Da fehlen mir die teoretischen Ansätze. Wie könnte ich den Performance bei dieser Tabelle beurteilen.
Eine Tabelle mit 17 Mil. Datensätzen, ist es realisierbar. Gibt es vielleicht eine Literaturempfehlung zu diesem Thema?

Code:
Date	      Time	               Code   Level	      Size	     Miss    	Mean 
01.01.2001	01:00:00	164	        0	        1	      0	       0.99852
01.01.2001	02:00:00	164         0	        1	      0	       0.98135
01.01.2001	03:00:00	164  	0	        1	      0	       0.96871
01.01.2001	04:00:00	164 	0	        1	      0	       0.96967

danke Voraus
 
Hi,

die Performance sollte kein Problem darstellen, sofern du nicht allzu komplexe Abfragen auf diese Tabelle machen wirst. Ich würde noch überlegen, ob die Zeit und das Datum nicht zusammen in ein Feld (DATETIME oder bei notwendigen Vergleichsoperationen TIMESTAMP) sinnvoller wäre. MySQL speichert TIMESTAMPs nicht als Zeichenkette sondern tatsächlich als Zahl ab. Das hat den Vorteil, dass Vergleichsoperationen (<>!=) bei einem TIMESTAMP bedeutend schneller sind als bei einem DATETIME. Andersherum sind auf ein DATETIME die Datumsfunktionen DATE/DATE_ADD etc. pp schneller. Bei größeren Datenmengen würde ich immer zu TIMESTAMP tendieren, da hier die Vergleichsoperation doch bedeutend schneller läuft und Datumsfunktionen auch in nach gelagerten Systemen/Programmteilen statt finden können.

Das Ko-Kriterium von Tabellen mit vielen Records sind darüber hinaus zu breite Relationen (zu viele Spalten). Große Tabellen sollten möglichst wenige variable Spalten aufweisen (VARCHAR etc.). Einige DBA's verwenden die Technik, Felder fester Länge (Int, char, etc.) von Feldern variabler Länge voneinander zu trennen, sprich in verschiedene Tabellen zu speichern. Ich sehe diese Möglichkeit jedoch nicht als Hausmittel an. Es kommt immer auf den individuellen Fall an. Grundsätzlich müssen große Datenmengen gut partitioniert werden (sowohl vertikal als auch horizontal).

Du solltest bereits im Vorfeld wissen, welche Art von Abfragen auf diese Daten notwendig sein werden. Das Setzen von gescheiten Indexen ist im Grunde DAS Kriterium, um eine gute Performance (egal bei welchem DBMS) zu erzielen.
Weiterhin ist zu beachten, dass das Einspielen eines DUMP-Files (z.B. nach einem Crash) bzw. das Dumpen (zur Sicherung) größerer Datenmengen eine gewisse Zeit in Anspruch nimmt.
Wir handhaben mittels MySQL mehrere Tabellen mit mehr als 40 Mio Records ohne dabei Performance Probleme fest zu stellen. Sicherlich spielt hier neben der Struktur auch die Hardware eine Rolle, so dass sich pauschal nicht sagen lässt "jo läuft".

Grüße BN
 
danke,

für die sehr ausführliche Information. Ich mache mir Gedanken darüber, was du mir empfohlen hast.

Grüße
 
Zurück