19. Februar

REDAXO auf die Sprünge helfen

von Christoph 2 Kommentare

Nachdem wir bereits besprochen haben, wie man die Datenbank allgemein glücklich(er) machen kann, wollen wir das Gelernte heute direkt praktisch anwenden. Natürlich gibt es jetzt keine neue Version von REDAXO, in der auf Biegen und Brechen die Queries optimiert wurden, dafür aber ein kleines SQL-Script, das die Performance größerer Seiten (alles ab 200 Artikeln wird davon profitieren) wesentlich verbessern kann.

ALTER TABLE rex_article
    ADD INDEX `id` (`id`),
    ADD INDEX `clang` (`clang`),
    ADD UNIQUE INDEX `artikel_finden` (`id`, `clang`),
    ADD INDEX `re_id` (`re_id`);
 
ALTER TABLE rex_article_slice
    ADD INDEX `id` (`id`),
    ADD INDEX `clang` (`clang`),
    ADD INDEX `re_article_slice_id` (`re_article_slice_id`),
    ADD INDEX `article_id` (`article_id`),
    ADD INDEX `slices_finden` (`clang`, `article_id`);
 
ALTER TABLE rex_file
    ADD INDEX `re_file_id` (`re_file_id`),
    ADD INDEX `category_id` (`category_id`);
 
ALTER TABLE rex_file_category
    DROP PRIMARY KEY,
    ADD PRIMARY KEY (`id`),
    ADD INDEX `re_id` (`re_id`);
 
ALTER TABLE rex_module
    DROP PRIMARY KEY,
    ADD PRIMARY KEY (`id`),
    ADD INDEX `category_id` (`category_id`);
 
ALTER TABLE rex_user
    ADD UNIQUE INDEX `login` (`login`(50));

Das gesamte Script (unglaubliche 1 KB, wovon nur 0,5 KB eigentlicher Code sind) kann man sich der Bequemlichkeit halber natürlich auch direkt herunterladen.

Bei kleinen Seiten ist der Unterschied nicht zu bemerken. Gerade, wenn alle Inhalte im Cache liegen und immer nur brav über die REDAXO-API die Daten von Artikeln angefragt werden, bringen die zusätzlichen Indizes kaum etwas. Wer jedoch in AddOns durchaus etwas mehr Daten anfasst (zum Beispiel, wenn ganze Sprachinhalte kopiert werden sollen), wird dramatische Verbesserungen bemerken.

Eine semantische Änderung sollte noch angesprochen werden, damit sich niemand später beschwert: bei den Medienkategorien geht der Primärindex nun nicht mehr über die ID und den Titel, sondern nur noch über die ID. Wir haben bei bestem Willen nicht erraten können, warum der Titel einer Kategorie Teil des Primärindex sein sollte.

Dieser Beitrag wurde von Christoph am 19. Februar 2010 verfasst.

  1. 1 Chris am 09. März 2010um 09:38 Uhr

    HI,
    Danke erstmal für den informativen Redaxo BLOG. NICE Work.

    Ich wollte das Ganze per phpMyAdmin ausführen, jedoch wirft dieser nen Fehler:

    ALTER TABLE rex_article ADD INDEX `id` ( `id` ) ,
    ADD INDEX `clang` ( `clang` ) ,
    ADD UNIQUE INDEX `artikel_finden` ( `id` , `clang` ) ,
    ADD INDEX `re_id` ( `re_id` )

    #1061 – Duplicate key name ‘id’.

    gruß Chris

  2. 2 Christoph am 10. März 2010um 19:32 Uhr

    Hallo Chris,

    das kann eigentlich nur daher kommen, dass in deiner rex_article-Tabelle bereits ein anderer Index namens “id” definiert wurde. Hast du ggf. die Developer Utils von uns installiert? Die machen das bereits automatisch zur Installation.

    Auch glaube ich mich zu erinnern, dass die o.g. Indizes bereits ab REDAXO 4.3 zum Standard gehören. Wenn du also die Testversion von 4.3 nutzt, sollten die Indizes auch bereits vorhanden sein.

    Ich kann dir jetzt auch nicht raten, einfach den Index über ID zu entfernen, da ich nicht weiß, ob eine andere Komponenten deines REDAXOs darauf aufbaut (und dessen Performance in den Keller sinkt, wenn der Index fehlt).

    Grüße,
    Christoph

Kommentar verfassen (damit nicht immer nur andere zu Wort kommen)

(wird nicht veröffentlicht)