php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 17.11.2008, 12:16  
Neuer Benutzer
 
Registriert seit: 09.05.2006
Beiträge: 5
mark007q
Standard Select / Left Join Performance

Hallo,

vielleicht kann mir jemand bei einem Performance Problem weiterhelfen. Ich habe folgende Abfrage, die leider sehr langsam arbeitet:

$query="SELECT t.name as topic_name, t.id as topic_id,t.board_id,t.posts, t.closed,t.show_topic,t.old_board_id,
p.id as post_id, p.post_date,u.name as user_name , u2.name as start_user_name
FROM ".$_cfg['DB_PREFIX']."topic t
LEFT JOIN ".$_cfg['DB_PREFIX']."post p ON t.last_post = p.id
LEFT JOIN ".$_cfg['DB_PREFIX']."user u ON u.id = p.user_id
LEFT JOIN ".$_cfg['DB_PREFIX']."user u2 ON u2.id = t.user_id
WHERE t.board_id IN (".get_aviable_boards("board").")
ORDER BY p.post_date DESC
LIMIT 0,20";

Vermutlich liegt es an den LEFT JOIN Anweisungen. Hat jemand eine Idee, wie man ddie Abfrage beschleunigen kann?

Viele Grüße,
Mark
mark007q ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 17.11.2008, 12:34  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Zitat:
Hat jemand eine Idee, wie man ddie Abfrage beschleunigen kann?
JOIN-Indizes auf die jeweiligen FK-Spalten. Am besten kombinierte Indizes auf die relevanten Spalten, dann ist die Selektivität größer. Was spuckt dir denn ein

Code:
EXPLAIN SELECT ...
aus?
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 17.11.2008, 13:41  
Neuer Benutzer
 
Registriert seit: 09.05.2006
Beiträge: 5
mark007q
Standard

EXPLAIN spuckt folgendes aus:

id select_type table type possible_keys key key_len ref rows Extra

1 SIMPLE t ALL NULL NULL NULL NULL 23401 Using temporary; Using filesort
1 SIMPLE p eq_ref PRIMARY PRIMARY 4 d00.t.last_post 1
1 SIMPLE u eq_ref PRIMARY PRIMARY 4 d00.p.user_id 1
1 SIMPLE u2 eq_ref PRIMARY PRIMARY 4 d00.t.user_id 1
mark007q ist offline   Mit Zitat antworten
Alt 17.11.2008, 14:34  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Das Problem wird wohl (und ich bin wirklich kein SQL Experte) die Kombination
Code:
WHERE
	t.board_id irgendwas
ORDER BY
	p.post_date DESC
sein. MySQL hat keinen Index für t.board_id+p.post_date

Eine Lösung kann ich aber auch nur durch Ausprobieren finden (eventuell).
Kannst Du Beispieldaten in der Form
Code:
CREATE TABLE ...
CREATE TABLE ...
CREATE TABLE ...

INSERT INTO ...
INSERT INTO ...
INSERT INTO ...
INSERT INTO ...
bereitstellen?

edit: phpBB3 speichert zum Beispiel in der topics Tabelle auch das Datum des letzten Beitrags. Damit würdest Du das Problem mit einiger Sicherheit auch umschiffen.

Geändert von David (17.11.2008 um 14:45 Uhr).
David ist offline   Mit Zitat antworten
Alt 17.11.2008, 15:14  
Neuer Benutzer
 
Registriert seit: 09.05.2006
Beiträge: 5
mark007q
Standard

Zitat:
Zitat von David Beitrag anzeigen
Das Problem wird wohl (und ich bin wirklich kein SQL Experte) die Kombination
Code:
WHERE
    t.board_id irgendwas
ORDER BY
    p.post_date DESC
sein. MySQL hat keinen Index für t.board_id+p.post_date

edit: phpBB3 speichert zum Beispiel in der topics Tabelle auch das Datum des letzten Beitrags. Damit würdest Du das Problem mit einiger Sicherheit auch umschiffen.
Danke, das war es Der fehlende Index. Bei mir werde ebenfalls die Daten des letzten Beitrages in der Topic Tabelle gespeichert ... nach Änderung des order by auf t.last_post ist alles in "Butter".


Geändert von mark007q (17.11.2008 um 21:11 Uhr).
mark007q ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Left join und inner join stefanjann Datenbanken 7 16.10.2008 15:45
MySQL UNION ALL mit LEFT JOIN? familyman Datenbanken 4 09.10.2008 12:15
performance problem mit join leo Datenbanken 4 14.01.2008 22:31
WHERE-Clause im Left Join cycap Datenbanken 2 06.11.2007 11:06
JOIN / LEFT JOIN und Co prinzli Datenbanken 12 05.11.2007 22:15
[solved] LEFT JOIN - #1066 - Not unique table/alias moose Datenbanken 6 12.12.2006 06:41
[gelöst] LEFT JOIN und trotzdem nicht alle Sätze da?!? stefanjann Datenbanken 3 24.10.2006 11:32
Problem mit Inner join Jabi Datenbanken 15 09.05.2006 14:10
LEFT OUTER JOIN für mehr als 2 Tabellen ? Alpha Centauri Datenbanken 4 05.04.2006 16:18
Select Problem Datenbanken 17 16.01.2006 21:54
[Erledigt] LEFT JOIN Query Bildung Datenbanken 6 04.11.2005 15:24
select Join und id wird nicht überall ausgegeben Sonja PHP Tipps 2005 7 19.05.2005 09:25
[Erledigt] LEFT JOIN Problem Datenbanken 11 21.03.2005 16:36
[Erledigt] left outer join mit bedingung Datenbanken 2 04.03.2005 00:52
den letzte(grösten) eintrag aus LEFT JOIN Datenbanken 2 24.07.2004 18:33

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mysql join performance, left join performance, mysql left join performance, left join beschleunigen, left join index, left join langsam, select left join, mysql join beschleunigen, php select left join, performance left join, mysql join langsam, mysql left join beschleunigen, mysql performance left join, left join sehr langsam, select left, left join, http://www.php.de/datenbanken/49084-select-left-join-performance.html, join performance, select join performance, mysql left join slow

Alle Zeitangaben in WEZ +1. Es ist jetzt 06:34 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum