php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 08.08.2009, 22:19  
Benutzer
 
Registriert seit: 10.07.2009
Beiträge: 54
PHP-Kenntnisse:
Fortgeschritten
Peterle befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Count+Subselect+Join Optimierung

Hallo,

ich habe ein paar Threads hier im Forum zu meinem Problem durchgelesen (auch die hier auf Seite 1), jedoch brachten die Änderungen nicht zum gewünschten Erfolg.
Deshalb bitte ich euch, mal ein Auge auf folgenden Query zu werfen und mir Ratschläge zur Optimierung von mehreren Count()s, ohne Subselects mehr, zu geben.

Warum keine Subselects? Weil die, in diese Form ca. 0,2 Sekunden mehr braucht, als vorher.

Das ist der Übeltäter:
Code:
SELECT
	COUNT(*) as AnzahlA,
	(SELECT COUNT(*) FROM counter_ip WHERE Datum = CURDATE()) as AnzahlB,
	(SELECT COUNT(*) FROM counter_ip) as AnzahlC,
	config.klicks as AnzahlD
FROM
	user_online
LEFT OUTER JOIN 
	config ON (config.ID = 1)
GROUP BY AnzahlD
Danke schonmal =)
Peterle ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 08.08.2009, 22:36  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Also das geht doch locker in 2 extra Abfragen:
Code:
SELECT COUNT(*) FROM counter_ip WHERE Datum = CURDATE() as AnzahlB
SELECT COUNT(*) FROM counter_ip as AnzahlC
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 08.08.2009, 22:47  
Benutzer
 
Registriert seit: 10.07.2009
Beiträge: 54
PHP-Kenntnisse:
Fortgeschritten
Peterle befindet sich auf einem aufstrebenden Ast
Standard

Hi,

danke für die Antwort.
Mir ist bewusst, dass es einfacher mit zwei Abfragen wäre - dies ist aber nicht mein Ziel.
Ich möchte es gerne in einer Abfrage haben. =)

Danke.
Peterle ist offline   Mit Zitat antworten
Alt 08.08.2009, 22:48  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Sorry, aber da wird jeweils ein Wert ermittelt. Das als Subselect zu machen ist grober Unfug. Notfalls benutz halt ein UNION der drei Queries.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 08.08.2009, 22:59  
Benutzer
 
Registriert seit: 10.07.2009
Beiträge: 54
PHP-Kenntnisse:
Fortgeschritten
Peterle befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
Sorry, aber da wird jeweils ein Wert ermittelt. Das als Subselect zu machen ist grober Unfug. Notfalls benutz halt ein UNION der drei Queries.
Ob ich die Werte aus einem Subselect oder aus zwei weiteren Queries hole ist so ziemlich egal. Die Subselects sind jedoch schneller (ca. 0,1sec), als die Summe aus zwei weiteren Queries. Kannst du selbst nachmessen, bei mir ist es zumindest so der Fall.

UNION wäre eine Möglichkeit, muss ich mal schauen... aber ich dachte da mehr an weiteren JOINs. Sprich, ob man die COUNT-Funktion auch in einem JOIN verwenden könnte.
Peterle ist offline   Mit Zitat antworten
Alt 08.08.2009, 23:26  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Na dann setz halt die Subselects in den FROM Teil..
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 08.08.2009, 23:39  
Benutzer
 
Registriert seit: 10.07.2009
Beiträge: 54
PHP-Kenntnisse:
Fortgeschritten
Peterle befindet sich auf einem aufstrebenden Ast
Standard

Aber genau da komme ich nicht weiter, weil was soll ich jetzt in SELECT schreiben? Wenn ich da nun nochmal COUNT anwende ist es doppelt gemoppelt. Und selbst wenn, bräuchte ich für jede Tabelle im SELECT ein eigenständiges COUNT, was wiederum nicht machbar ist.
Oder denke ich da etwas falsch?

Hier wie es nun aussieht:
Code:
SELECT
	//Und was hier?
FROM
	(SELECT COUNT(*) FROM user_online) as tabelleA ,
	(SELECT COUNT(*) FROM counter_ip WHERE Datum = CURDATE()) as tabelleB,
	(SELECT COUNT(*) FROM counter_ip) as tabelleC,
	(SELECT klicks FROM config WHERE ID = 1) as tabelleD
Danke.
Peterle ist offline   Mit Zitat antworten
Alt 08.08.2009, 23:49  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Code:
SELECT
	tabelleA.UserCount
FROM
	(SELECT COUNT(*) AS UserCount FROM user_online) as tabelleA
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 08.08.2009, 23:57  
Benutzer
 
Registriert seit: 10.07.2009
Beiträge: 54
PHP-Kenntnisse:
Fortgeschritten
Peterle befindet sich auf einem aufstrebenden Ast
Standard

Achso Danke.
Also von der Geschwindigkeit ist es gleich, wie mit dem Query in Beitrag 1.

Jetzt probiere ich mal UNION aus, ich vermute allerdings, dass es deutlich langsamer sein wird, da MySQL hier die Ergebnisse noch "zusammenfügen" muss. Und wenn sich meine Befürchtung bestätigt, werde ich wohl beim 1. Query bleiben müssen.
Peterle ist offline   Mit Zitat antworten
Alt 08.08.2009, 23:58  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

UNION ist doch viel trivialer für die Datenbank. Würde mich wundern, wenn das langsamer wäre.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch 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
Problem mit Abfrage - join, inner join, distinct? Gachet01 Datenbanken 2 27.01.2011 06:49
JOIN und LEFT JOIN verbinden? Dynamite53 Datenbanken 8 15.05.2009 15:16
Persistence Framework #Avedo Software-Design 37 28.03.2009 17:32
Bräuchte hilfe bei schleifenproblem innerhalb SQL anweisung Kronic73 Datenbanken 8 01.03.2009 01:10
[Erledigt] mit einer CHECKBOX feld nach mehreren wörtern durchsuchen taurus Datenbanken 20 01.12.2008 10:49
[Erledigt] Left join und inner join stefanjann Datenbanken 7 16.10.2008 15:45
Variable aus Subselect in JOIN verwenden GSJLink Datenbanken 5 25.05.2008 11:36
[gelöst]LEFT JOIN, DINSTINCT und trotzdem doppelte?!?! stefanjann Datenbanken 10 06.02.2008 11:49
JOIN / LEFT JOIN und Co prinzli Datenbanken 12 05.11.2007 22:15
Wiederholter statt neuer COUNT bei JOIN Greezoo Datenbanken 5 06.07.2007 14:10
Count Problem bei einem Join obi Datenbanken 3 18.06.2007 14:29
Problem mit Inner join Jabi Datenbanken 15 09.05.2006 14:10
inner join aus db PHP Tipps 2006 8 22.01.2006 01:23
mehrere COUNT() auf selbe Tabelle und »can't reopen table« tapferesschneiderlein Datenbanken 3 04.04.2005 13:51
JOIN mit count db Datenbanken 1 23.09.2004 13:09

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
http://www.php.de/datenbanken/57896-erledigt-count-subselect-join-optimierung.html, tsql count subselect, count subselect, join subselect, mysql count optimieren, sql count optimieren, sql join optimierung, select count join, mysql subselect count, subselct mit where in joins, tsql subselect join, t-sql count subselect, t-sql joins optimieren, zwei count verbinden, sql count subselect, left join subselect, count a variable in subselect, tsql subselect, join optimieren, mysql count subselect

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