Performance Optimierung für xt:Commerce / commerce:SEO

  • Das kann ich nicht wirklich sagen. Wenn es klein geschrieben ist, dann ist es noch eine xt Commerce Alt-Last. Habs mit aufgenommen und werde das mal Client und Serverseitig mit rund 1,5 Mio artikeln durchmessen.

    Schonmal danke für den Hinweis.

  • incudes/classes/product.php

    Diese Datenbankabfrage mit "SELECT *" könnte man doch auch noch optimieren.
    Ich kann in dieser Abfrage zum Beispiel mindestens auf 6-7 Spalten aus der Tabelle PRODUCTS verzichten (Videos, EAN, FSK18 etc.)

    Ich hatte mal das * mit den Spaltennamen ersetzt aber das funktionierte nicht, da ich von Joins keine Ahnung habe.

    Wie müsste denn die Abfrage aussehen, wenn man die einzelnen Spalten angibt?

  • z.B. p.products_id, pd.name, ....

    oder wenn man Spaltennamen im Ergebnis anders benennen will:

    p.products_id AS produktnummer, pd.name AS produktname, ...

    Naja, bei einem einzigen Produkt als Ergebnisliste ist das wohl hier eher zu vernachlässigen und würde es komplizierter machen, da die Felder dieser Abfrage sicherlich in vielen Templates verwendet werden.

  • Ein Tipp zur optimierung der advanced_search_result.php
    das ist mehr als spürbar bei mehr als 1000 Artikel.

    multisort ist das Problem alle GROUP BY pd.products_id ändern in GROUP BY p.products_id

    Zeile 244 bis 268 austauschen

    switch ($_GET['multisort']){
    case 'new_asc':
    $order_str = 'GROUP BY p.products_id ORDER BY p.products_date_added ASC';
    break;
    case 'new_desc':
    $order_str = 'GROUP BY p.products_id ORDER BY p.products_date_added DESC';
    break;
    case 'name_asc':
    $order_str = 'GROUP BY p.products_id ORDER BY pd.products_name ASC';
    break;
    case 'name_desc':
    $order_str = 'GROUP BY p.products_id ORDER BY pd.products_name DESC';
    break;
    case 'price_asc':
    $order_str = 'GROUP BY p.products_id ORDER BY p.products_price ASC';
    break;
    case 'specialprice':
    $order_str = 'GROUP BY p.products_id ORDER BY s.specials_new_products_price DESC';
    break;
    case 'price_desc':
    $order_str = 'GROUP BY p.products_id ORDER BY p.products_price DESC';
    break;
    default:
    $order_str = ' GROUP BY p.products_id ORDER BY pd.products_name';
    }


    Hatte das mal in den Bugtracker geschrieben, hat aber niemanden interssiert!? :(

    • Offizieller Beitrag

    Habe das mal getestet, aber einen wirklichen Performance Spung kann ich nicht entdecken. Bei 30.000 Artikeln bleibt die SQL Zeit gleich. Können es aber auch gern mit aufnehmen, wenn es Sinn macht.

  • Das sollte nichts ändern. Das entfernen des DISTINCTs in der advanced_search_result.php ist dagegen sinnig.

  • Nur mal der Vollständigkeit halber. Das DISTINCT legt eine Temporäre Tabelle an um doppelte Treffer herauszufiltern. Geht bei mehreren 10'000 Artikeln imens auf die Hardware.

  • admin
    @siekiera

    bei nur einer Sprache bringt das sicher nicht so viel aber bei 2 oder mehr Sprachen war es bei mir viel schneller (5400 Artikel).

    1) GROUP BY pd.products_id ändern in GROUP BY p.products_id
    2) DISTINCT raus

    denn eine p.products_id kann überhaupt nicht doppelt ausgegeben werden.