hi, ich habe mit Hilfe von Abraxax folgendes SQL-Statement zusammen gebaut.
Leider benötigt die Ausführung 11.93ms und da habe ich nur 1 Banner herausgeholt. Und auf einer Seite kann man mal locker 5 Banner rechnen, das macht dann ca. 55 ms und das finde ich einfach zu langsam.
Indexe habe ich in der banner_placement_relationship Tabelle auf die Spalte placement_id gesetzt (die andere Spalte in dieser Tabelle ist banner_id) und in der banner Tabelle auf die Spalte banner_id. Leider ist es nicht viel schneller geworden (ca. 1ms).
Was ich noch für ein Problem habe ist, ich muss ein Subselect einbauen (hier jetzt nicht für euch erkennbar), aber Subselects gibts anscheinend erst ab 4.1
Zurück zum Problem: wie kann ich die Abfrage noch optimieren?
PHP-Code:
$sql = 'SELECT
b.banner_id,
b.banner_name,
b.banner_path_id,
b.banner_url,
b.banner_html,
b.banner_title,
b.type,
b.width,
b.height,
IF (b.max_view_activate = "1",
IF (b.max_view_count < b.max_view, "1", "0"), "1")view_max_view_activate,
IF (b.max_click_activate = "1",
IF (b.max_click_count < b.max_click, "1", "0"), "1")view_max_click_activate,
IF (b.date_activate = "1",
IF (b.date_start <= CURDATE(),
IF (b.date_end >= CURDATE(), "1", "0"), "0"), "1")view_date_activate,
IF (b.time_activate = "1",
IF (b.time_start <= CURTIME(),
IF (b.time_end >= CURTIME(), "1", "0"), "0"), "1")view_time_activate,
IF (b.show_'.strtolower(date("D")).'="1", "1", "0")view_show_day
FROM {prefix}banner_placement_relationship bp
INNER JOIN {prefix}banner b ON (
bp.banner_id = b.banner_id
AND b.activate = "1"
)
WHERE bp.placement_id="'.$this->placements[$a].'"
HAVING view_max_view_activate="1"
AND view_max_click_activate="1"
AND view_date_activate="1"
AND view_time_activate="1"
AND view_show_day="1"
ORDER BY RAND() LIMIT 1';
Indexe habe ich in der banner_placement_relationship Tabelle auf die Spalte placement_id gesetzt (die andere Spalte in dieser Tabelle ist banner_id) und in der banner Tabelle auf die Spalte banner_id. Leider ist es nicht viel schneller geworden (ca. 1ms).
Was ich noch für ein Problem habe ist, ich muss ein Subselect einbauen (hier jetzt nicht für euch erkennbar), aber Subselects gibts anscheinend erst ab 4.1
Zurück zum Problem: wie kann ich die Abfrage noch optimieren?
Kommentar