Hallo Leute,
ich habe eine MySQL Tabelle mit 8 Spalten und 4 Indizes:
Bei wenigen Datensätzen in der Tabelle klappt das Einfügen sehr schnell, sobald die Anzahl Richtung mehrere Millionen geht, werden die Insert-Queries jedoch deutlich langsamer. Eine Zeile ist bei mir durchschnittlich ca 3kbyte groß.
Für das Erstellen der 4 Indizes wird der Aufwand natürlich mit steigender Zeilenanzahl höher, allerdings sollte er logarithmisch steigen.
Quelle: MySQL :: MySQL 5.0 Reference Manual :: 7.2.18 Speed of INSERT Statements
Dies erklärt also meiner Meinung nach nicht die Performance-Einbrüche.
Ich frage mich nun, wie MySQL den Index-Baum intern verwaltet, bzw wartet. Dieser muss ja eigentlich während des Einfügens immer wieder neu gewichtet werden, damit ein optimaler Index entsteht. Wann führt MySQL diese Operationen aus, oder muss man es manuell dazu anstoßen?
Wenn jemand dazu etwas weiß, oder schon ähnliche Szenarien hatte, wäre ich über eine Antwort sehr erfreut.
Viele Grüße,
Zender
ich habe eine MySQL Tabelle mit 8 Spalten und 4 Indizes:
CREATE TABLE IF NOT EXISTS `test` (
`Subject` varchar(5000) NOT NULL,
`From` varchar(5000) NOT NULL,
`GUID` char(36) NOT NULL,
`ParentGUID` char(36) NOT NULL,
`Date` bigint(20) NOT NULL,
`Parts` int(11) NOT NULL,
`GroupID` int(11) NOT NULL,
`DataInfo` mediumblob,
PRIMARY KEY (`GUID`),
KEY `ParentGUID` (`ParentGUID`),
KEY `Date` (`Date`),
KEY `Subject` (`Subject`(20))
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
`Subject` varchar(5000) NOT NULL,
`From` varchar(5000) NOT NULL,
`GUID` char(36) NOT NULL,
`ParentGUID` char(36) NOT NULL,
`Date` bigint(20) NOT NULL,
`Parts` int(11) NOT NULL,
`GroupID` int(11) NOT NULL,
`DataInfo` mediumblob,
PRIMARY KEY (`GUID`),
KEY `ParentGUID` (`ParentGUID`),
KEY `Date` (`Date`),
KEY `Subject` (`Subject`(20))
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Für das Erstellen der 4 Indizes wird der Aufwand natürlich mit steigender Zeilenanzahl höher, allerdings sollte er logarithmisch steigen.
The size of the table slows down the insertion of indexes by log N, assuming B-tree indexes.
Dies erklärt also meiner Meinung nach nicht die Performance-Einbrüche.
Ich frage mich nun, wie MySQL den Index-Baum intern verwaltet, bzw wartet. Dieser muss ja eigentlich während des Einfügens immer wieder neu gewichtet werden, damit ein optimaler Index entsteht. Wann führt MySQL diese Operationen aus, oder muss man es manuell dazu anstoßen?
Wenn jemand dazu etwas weiß, oder schon ähnliche Szenarien hatte, wäre ich über eine Antwort sehr erfreut.
Viele Grüße,
Zender

Kommentar