Hallo!
Habe einw enig mit der Typo3-DB rumexperimentiert und würde gern mit Euch das vorläufige Ergebnis diskutieren:
Das Original-Posting stammt von http://www.typo3forum.net/forum/tools-und-tipps/5473-typo3-db-optimierung.html#post24464
[quote="maxhb"]Hi!
Beim Anschauen der Typo3-Tabellen ist mir aufgefallen, dass dort Indizes sehr serh sparsam eingesetzt werden.
Wenn man mal darüber nachdenkt, dann gibt es aber diverse Spalten, die sich als Index nahezu anbieten. Dies sind insbesondere die Spalten "hidden", "deleted" und "sorting".
Ich hab' mal einen kleinen Versuch gestartet und meine Typo3-Db folgendermaßen modifiziert:
[code]ALTER TABLE `cache_hash` ADD INDEX ( `hash` ( 4 ) ) ;
ALTER TABLE `pages` ADD INDEX ( `deleted` ( 1 ) ) ;
ALTER TABLE `pages` ADD INDEX ( `hidden` ( 1 ) ) ;
ALTER TABLE `pages` ADD INDEX ( `doktype` );
ALTER TABLE `pages` ADD INDEX ( `sorting` );
ALTER TABLE `tt_content` ADD INDEX ( `deleted` ( 1 ) ) ;
ALTER TABLE `tt_content` ADD INDEX ( `hidden` ( 1 ) ) ;
ALTER TABLE `sys_template` ADD INDEX ( `deleted` ( 1 ) ) ;
ALTER TABLE `sys_template` ADD INDEX ( `hidden` ( 1 ) ) ;
ALTER TABLE `sys_template` ADD INDEX ( `sorting` );[/code] Mit diesen SQL-Kommandos werden eine Reihe von zusätzlichen Indizes angelegt (Keine Angst, der Vorgang kann problemlos wieder Rückgängig gemacht werden!).
Wie man sieht sind das noch längst nicht alle Tabellen, sondern nur die, die mir so auf Anhieb als besonders wichtig aufgefallen sind.
Nimmt man jetzt mal nur die reine Zeit, die DB-Anfragen zur Anzeige einer Seite benötigen, dann ergeben obige Anpassungen bei mir einen Speedup um den Faktor 300.
Konkret ist die mittlere Zeit für DB-Anfragen von 0,122s auf 0,0004s gesunden.
Das ist zwar in absoluter Zeit nicht die Welt, aber der Faktor 300 steht erstmal als grobe Abschätzung im Raum.
Mir ist klar, dass die Zeit, die DB-Anfragen benötigen nur ein Teil der CPU-Leistung sind, die Typo3 benötigt, aber wenn man solche Zugewinne geschenkt bekommt...
Die Messung der DB-Zugriffszeiten habe ich übrigens durch anpassen der Datei t3lib/class.t3lib_db.php vorgenommen und mr dort ein Logfile erstellen lassen. Habe dort die Methode exec_SELECTquery aufgebohrt:
function exec_SELECTquery($select_fields,$from_table,$where_clause,$groupBy='',$orderBy='',$limit='') { // Start static $total_time = 0; $logfile = '/tmp/max/typo3.log'; if($total_time == 0) { } else { $message = ''; } $message .= str_replace("\n"," ",$this->SELECTquery($select_fields,$from_table,$where_clause,$groupBy,$orderBy,$limit)); function getmicrotime() { return ((float)$usec + (float)$sec); } } $start = getmicrotime(); // Ende $res = mysql_query($this->SELECTquery($select_fields,$from_table,$where_clause,$groupBy,$orderBy,$limit), $this->link); if ($this->debugOutput) $this->debug('exec_SELECTquery'); // Start $ende = getmicrotime(); $time = $ende - $start; $total_time += $time; $message = $time . " (" . $total_time . ")\n" . $message . "\n"; // Ende return $res; }
Vielleicht mag ja mal jemand einen ähnlichen Versuch starten und seine Ergebnisse hier posten.
Ganz allgemein frage ich mich, ob die Tatsache, dass Typo3 so wenige Indizes verwendet Absicht ist oder ob sich noch niemand die Mühe gemacht hat, das DB-Modell mal genauer anzuschauen.
cu
maxhb[/quote]
CU
maxhb