php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 11.08.2009, 11:30  
Neuer Benutzer
 
Registriert seit: 11.08.2009
Beiträge: 11
PHP-Kenntnisse:
Anfänger
AKraisser befindet sich auf einem aufstrebenden Ast
Standard SELECT Unterabfragen optimieren

Hab das Problem das die Abfrage zwar funktioniert aber 20 Sec. braucht.

Code:
SELECT comment_content FROM wp_comments WHERE comment_post_ID IN
(SELECT DISTINCT object_id FROM wp_term_relationships INNER JOIN wp_term_taxonomy WHERE parent = 15 )
ORDER BY comment_date DESC
LIMIT 0, 5
Die Unterabfrage liefert einige tausend IDs die alle in der zweiten Select anfrage gesucht werden. Das Ergebniss wird dann Sortiert und das dauert ziemlich lange.

Kann auch einen Link zum Datenbankdiagramm posten.

Wer kann mir helfen diese Abfrage zu beschleunigen ?

Danke
AKraisser ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 11.08.2009, 11:55  
erc
Erfahrener Benutzer
 
Registriert seit: 02.01.2009
Beiträge: 730
PHP-Kenntnisse:
Fortgeschritten
erc wird schon bald berühmt werden
Standard

Poste mal ein EXPLAIN...
erc ist offline   Mit Zitat antworten
Alt 11.08.2009, 12:05  
Neuer Benutzer
 
Registriert seit: 11.08.2009
Beiträge: 11
PHP-Kenntnisse:
Anfänger
AKraisser befindet sich auf einem aufstrebenden Ast
Standard

id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY wp_comments ALL NULL NULL NULL NULL 11752 Using where; Using filesort
2 DEPENDENT SUBQUERY wp_term_relationships ref PRIMARY PRIMARY 8 func 124 Using where; Using index; Using temporary
2 DEPENDENT SUBQUERY wp_term_taxonomy ALL NULL NULL NULL NULL 2947 Using where; Distinct
AKraisser ist offline   Mit Zitat antworten
Alt 11.08.2009, 12:39  
erc
Erfahrener Benutzer
 
Registriert seit: 02.01.2009
Beiträge: 730
PHP-Kenntnisse:
Fortgeschritten
erc wird schon bald berühmt werden
Standard

Hrm... und das explain gehört auch genau zu dem Query? Ich versteh nicht warum der abhängig sein soll

Abhilfe schaft auf jedenfall den Subquery in die Form-Klausel zu packen und den zu joinen.
erc ist offline   Mit Zitat antworten
Alt 11.08.2009, 14:04  
Neuer Benutzer
 
Registriert seit: 11.08.2009
Beiträge: 11
PHP-Kenntnisse:
Anfänger
AKraisser befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von erc Beitrag anzeigen
Hrm... und das explain gehört auch genau zu dem Query? Ich versteh nicht warum der abhängig sein soll

Abhilfe schaft auf jedenfall den Subquery in die Form-Klausel zu packen und den zu joinen.
Ohh danke aber ich bin noch nicht so fit mit SQL. War heut mein erster Versuch.
Wie könnte denn die Abfrage dann ausschauen wenn das Subquery in der FROM klausel ist ? Und wieso bringt das mehr Geschwindigkeit?

Anbei noch der Link zum Datenbankdiagramm. Vielleicht hilft ja der etwas.
http://codex.wordpress.org/images/8/83/WP_27_dbsERD.png

Ja das EXPLAIN gehört genau zu dem Query.

Danke
AKraisser ist offline   Mit Zitat antworten
Alt 11.08.2009, 14:56  
erc
Erfahrener Benutzer
 
Registriert seit: 02.01.2009
Beiträge: 730
PHP-Kenntnisse:
Fortgeschritten
erc wird schon bald berühmt werden
Standard

Stell dir den Subquery einfach als Tabelle vor. Anstatt des Tabellennamen schreibst du einfach den Subquery (in Klammern und zwingend mit Alias)

Und ja das ist schneller. Bei dem jetzigen Query führt Mysql den Subquery für jeden Datensatz in wp_comments aus. In der Form-Klausel wird der Query nur einmal ausgeführt.
erc ist offline   Mit Zitat antworten
Alt 11.08.2009, 15:18  
Neuer Benutzer
 
Registriert seit: 11.08.2009
Beiträge: 11
PHP-Kenntnisse:
Anfänger
AKraisser befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von erc Beitrag anzeigen
Stell dir den Subquery einfach als Tabelle vor. Anstatt des Tabellennamen schreibst du einfach den Subquery (in Klammern und zwingend mit Alias)

Und ja das ist schneller. Bei dem jetzigen Query führt Mysql den Subquery für jeden Datensatz in wp_comments aus. In der Form-Klausel wird der Query nur einmal ausgeführt.
OK verstanden so weit.

Code:
 SELECT comment_content
FROM wp_comments, (
SELECT DISTINCT object_id
FROM wp_term_relationships
INNER JOIN wp_term_taxonomy
WHERE parent =15
) AS z
WHERE comment_post_ID
LIMIT 0 , 30
Aber irgendwie hab ich es noch nicht 100% verstanden.

AS z ist der wert object_id oder?
Wenn ja wie kann ich dann folgendes realisieren ?
WHERE comment_post_ID = z
AKraisser ist offline   Mit Zitat antworten
Alt 11.08.2009, 15:21  
erc
Erfahrener Benutzer
 
Registriert seit: 02.01.2009
Beiträge: 730
PHP-Kenntnisse:
Fortgeschritten
erc wird schon bald berühmt werden
Standard

Nein z.object_id ist das was du suchst. Und ja, genau das geht damit...
erc ist offline   Mit Zitat antworten
Alt 11.08.2009, 15:22  
Neuer Benutzer
 
Registriert seit: 11.08.2009
Beiträge: 11
PHP-Kenntnisse:
Anfänger
AKraisser befindet sich auf einem aufstrebenden Ast
Standard

Jetzt hab ich noch was versucht !

Code:
SELECT comment_content FROM wp_comments, (SELECT DISTINCT object_id AS o_id FROM wp_term_relationships INNER JOIN wp_term_taxonomy WHERE parent = 15 ) AS z WHERE comment_post_ID = o_id ORDER BY comment_date DESC LIMIT 0, 5
Funktioniert und ist schnell aber ob das richtig ist ?
So ganz versteh ich es noch nicht!
AKraisser ist offline   Mit Zitat antworten
Alt 11.08.2009, 15:33  
Neuer Benutzer
 
Registriert seit: 11.08.2009
Beiträge: 11
PHP-Kenntnisse:
Anfänger
AKraisser befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von erc Beitrag anzeigen
Nein z.object_id ist das was du suchst. Und ja, genau das geht damit...
WOW ! DANKE jetzt geht es mit knapp 1 sec. statt 20 sec.
Ohne dich hätte ich das nicht geschaft !

Jetzt muss ich das alles noch mal studieren damit ich es auch richtig verstehe.

THX
AKraisser 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] Counter optimieren pan666 PHP Tipps 2009 8 04.08.2009 14:54
[Erledigt] 2 Select-Abfragen in eine Variable speichern TheMav Datenbanken 3 18.06.2009 00:29
[Erledigt] Select * where in (Select ...) Geschwindigkeitsproblem Wolla Datenbanken 14 20.05.2009 15:16
SQL select fehlerhafte Resultate. Ist PHP 64 Bit das Problem? peterw Server, Hosting und Workstations 6 21.04.2009 09:19
[Erledigt] Kein Ergebnis bei SELECT (MySQL 4.1.9) dr.e. Datenbanken 4 15.06.2008 19:54
[Erledigt] Mysql Insert Select + Concat Hu5eL Datenbanken 14 10.06.2008 10:39
SELECT-Abfrage optimieren pz6j89 Datenbanken 14 17.04.2008 17:37
Unterabfragen mit MySQL amenhotheb Datenbanken 6 27.06.2006 00:11
SELECT AS geht bei AVG net cyberholic Datenbanken 0 04.05.2006 09:43
[JavaScript] Event Handler in form select - Syntax? winfo_cologne HTML, Usability und Barrierefreiheit 5 29.03.2006 16:47
Probleme mit Inner Select Datenbanken 0 19.10.2005 15:22
selbst gelöst! Select <option> kleines Problem Dropdow 24bits PHP Tipps 2005-2 0 15.10.2005 19:19
Select optimieren oder anpassen Datenbanken 21 21.09.2004 20:45
[Erledigt] 2 mal select 1 form PHP-Fortgeschrittene 1 01.09.2004 20:13
selektierter wert in select box anzeigen PHP Tipps 2004 6 30.08.2004 13:49

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mysql unterabfrage, mysql unterabfragen, http://www.php.de/datenbanken/57964-select-unterabfragen-optimieren.html, mysql select unterabfrage, sql unterabfragen optimieren, mysql subquery optimieren, mysql unterabfrage select, mysql unterabfragen select, sql abfragen optimieren, mysql select unterabfragen, subquery optimierung, sql unterabfrage optimieren, mysql unterabfrage in select, sql unterabfrage in select, sql unterabfragen beschleunigen, unterabfragen mysql, sql select optimieren, php select abfrage beschleunigen, sql subabfrage optimieren, mysql unterabfrage optimieren

Alle Zeitangaben in WEZ +2. Es ist jetzt 08:24 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