21Dez
Tags: PHP
Kommentieren
Die Funktion array_unique() (PHP 4 >= 4.0.1, PHP 5) stellt die Funktionalität zur Verfügung, doppelte Einträge (der Werte) aus einem Array zu entfernen. Es sollte jedoch beachtet werden, dass die Array-Schlüssel erhalten bleiben.
Um ein neues Array mit fortlaufenden Schlüsseln zu generieren, verwende man diesen Code (falls man das Array anschließend mit einer for-Schleife durchlaufen möchte):
$array = array_values(array_unique($array));
20Dez
Tags: MySQL-Server | Webserver
Kommentieren
In einem aktuen Fall war eine Datenbank mit ca. 60.000 Einträgen und vielen Spaltendaten bei der Abfrage simpler gefilterter Daten mit einem Limit von 0, 10 langsam und es hieß diese zu optimieren. Neben der Überprüfung der Abfragen über
EXPLAN SELECT * FROM *
in welcher dann ersichtlich ist, welche Keys hinzugezogen werden (diese sind oft ausschlaggebend für die Geschwindigkeit der Abfrage), sollte man sich ebenfalls einmal den Query-Cache des Servers ansehen.
Hierfür gibt es (oder auch noch nicht, dann hinzufügen) eine Abfrage in der my.cnf namens query_cache_limit
, welche oftmals auf 0
steht. Damit ist der Query Cache deaktiviert und es werden keine Abfragen gecached. Das Caching der Abfragen speichert diese zwischen und führt diese nicht jedes Mal erneut aus (sofern sich die Tabelle nicht geändert hat). Das ist auf jeden Fall ratsam, wenn eine Datenbank nicht ständig geändert wird. Man stelle diesen Wert einfach mal auf 8M
o.Ä. und beobachte in phpMyAdmin die Statusvariablen unter „Abfragen Cache“. Dort erkennt man die Auslastung des aktuellen Cache, wie viele Abfragen aufgenommen und insbesondere wie viele herausgeschmissen wurden (weil der Cache zu klein ist).
In unserem Fall haben wir einen Geschwindigkeitsschub von 1127ms (also über eine Sekunde) erreichen können. Gebe zu: Der Server ist eine kleine Krücke. Aber die Resultate überzeugen.
20Dez
Tags: Redaxo
Kommentieren
Einfach die folgenden SQL-Befehle ausführen und die Artikel erscheinen wieder:
ALTER TABLE rex_action
CHANGE revision
revision
INT( 11 ) NOT NULL DEFAULT '0'; ALTER TABLE rex_article
CHANGE revision
revision
INT( 11 ) NOT NULL DEFAULT '0'; ALTER TABLE rex_article_slice
CHANGE revision
revision
INT( 11 ) NOT NULL DEFAULT '0'; ALTER TABLE rex_clang
CHANGE revision
revision
INT( 11 ) NOT NULL DEFAULT '0'; ALTER TABLE rex_file
CHANGE revision
revision
INT( 11 ) NOT NULL DEFAULT '0'; ALTER TABLE rex_file_category
CHANGE revision
revision
INT( 11 ) NOT NULL DEFAULT '0'; ALTER TABLE rex_module
CHANGE revision
revision
INT( 11 ) NOT NULL DEFAULT '0'; ALTER TABLE rex_module_action
CHANGE revision
revision
INT( 11 ) NOT NULL DEFAULT '0'; ALTER TABLE rex_user
CHANGE revision
revision
INT( 11 ) NOT NULL DEFAULT '0'; UPDATE rex_article
SET revision
= 0; UPDATE rex_article_slice
SET revision
= 0;
Getestet bei einem Update von Redaxo 4.1 auf 4.2.1.