php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 08.01.2009, 23:48  
Neuer Benutzer
 
Registriert seit: 08.01.2009
Beiträge: 10
lala befindet sich auf einem aufstrebenden Ast
Standard mysql grundsatzfrage zu queryaufbau von join

Hallo ich bin relativ neu im Datenbankbereich (Mysql 4.XX myIsam) tätig und arbeite mit kleineren Tabellen ( < 10 Mio. Einträge). Nun habe ich ein paar grundlegende Fragen zum Aufbau meiner Sql Statements die meiner Meinung nach genau die gleiche Aussagekraft haben, jedoch Laufzeittechnisch bei unformulierung von 5 minuten auf 0.006 sec verkürzt werden können. Indizies sind meiner Meinung nach Richtig gesetzt.

1. Erstes Problem
Code:
SELECT * FROM tab1 JOIN tab2 On (tab1.kunde = tab2.kunde , tab1.auftrag = tab2.auftrag) Where tab1.zeit > irgendwas
Dieser Code ist sehr langsam, wenn ich jedoch sage
Code:
SELECT * FROM tab1,tab2 where tab1.kunde = tab2.kunde and tab1.auftrag = tab2.auftrag and tab1.zeit > irgendwas
wird er auf einmal super schnell.
1.1. Sollte man join on bla... immer in where statements aufteilen?
1.2 Gibt es eine Reihenfolge in der Where statements formuliert sein sollten?

2. Zweites Problem
Sobald ich eine Subquery mache.,z.B die zweite von oben
Code:
 select * from produkte, (SELECT * FROM tab1,tab2 where tab1.kunde = tab2.kunde and tab1.auftrag = tab2.auftrag and tab1.zeit > irgendwas)as kunden where kunden.produkt = produkt.id
Dieser Code ist zu Tode langsam, obwohl in der produkte Tabelle nur ca. 5000 Einträge sind.
2.1 Kommt es hier auf eine bestimmte Reihenfolge der Statements an?
2.2. Diese Abfrage ist eingentlich bis auf das zusammenfügen total unkorreliert, und sollte daher in log(n) zeigt zusammenfügbar sein? Mir scheint es aber so als ob er jeden Kundeneintrag erneut durchrattert. Indizies sind eigentlich gesetzt. Was sind hier die prinzipiellen Vorgehensweißen?

3. Macht Mysql 5.xx das ganze besser? Würde eingentlich gerne bei Mysql 4.xx da sonst die komplette Produktion gestoppt werden müsste um ein update einzuspielen. Bzw. der Aufwand nicht gerade wenig wäre eine Ersatzdatenbank für den updatezeitraum zu benutzen und dann Daten hin und her zu kopieren und Backups zu machen usw...

Ich freue mich auf jede Antwort oder auch link zu dem Thema, da ich nicht verstehen kann warum mache Anfragen langsam und manche schnell sind.

Vielen Dank
lala ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 09.01.2009, 00:11  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Bei solchen Fragen bitte immer die Tabellenstruktur mit angeben, am besten in der Form
Code:
CREATE TABLE foo(
  id int ...
)
also der Ausgabe von SHOW CREATE TABLE foo;
Und bei Bedarf auch gleich mit Beispieldaten in der Form
Code:
INSERT INTO foo (...) VALUES (...)


Schau Dir mal die Ausgabe von
Code:
EXPLAIN EXTENDED SELECT * FROM tab1 JOIN tab2 On (tab1.kunde = tab2.kunde , tab1.auftrag = tab2.auftrag) Where tab1.zeit > irgendwas
und direkt danach (ohne weitere Abfrage dazwischen)
Code:
SHOW Warnings
Und dann vergleiche das mal mit
Code:
EXPLAIN EXTENDED SELECT * FROM tab1,tab2 where tab1.kunde = tab2.kunde and tab1.auftrag = tab2.auftrag and tab1.zeit > irgendwas
und dann wieder
Code:
SHOW Warnings
Was die Ausgabe von EXPLAIN bedeutet wird unter MySQL :: MySQL 5.0 Reference Manual :: 7.2.1 Optimizing Queries with EXPLAIN beschrieben.
David 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] mit einer CHECKBOX feld nach mehreren wörtern durchsuchen taurus Datenbanken 20 01.12.2008 10:49
MySQL Join für Anfänger... Lapje Datenbanken 1 20.10.2008 10:19
[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
Ein kleines Join Problem (MySQL) susi85 Datenbanken 12 12.12.2007 20:00
MySQL Join mit 3 Tabellen quichibo Datenbanken 2 18.10.2007 10:58
komplizierter MySQL Join Broadcast Datenbanken 5 20.09.2007 11:10
Mysql Server Einstellunen Optimieren pchero Datenbanken 3 01.05.2007 19:50
mysql Abfrage Problem mit dem Join test022 Datenbanken 5 28.04.2007 08:07
Problem mit Inner join Jabi Datenbanken 15 09.05.2006 14:10
MySQL Server startet nicht mehr richtig... Datenbanken 16 03.03.2006 19:40
MySQL Join: Ich komme einfach nicht dahinter... pino Datenbanken 6 26.09.2005 23:20
Suche Tipps für Persormance-Steigerung (Geld für Nützliches) Beitragsarchiv 18 16.08.2005 10:57
MySql - Inner Join? PHP Tipps 2005-2 2 14.06.2005 15:24
[Erledigt] PHP5 &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;a m p; MySQL Datenbanken 5 01.08.2004 05:47

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mysql join, http://www.php.de/datenbanken/50495-mysql-grundsatzfrage-zu-queryaufbau-von-join.html, mysql join reihenfolge, join mysql, mysql query aufbau, join reihenfolge, mysql inner join reihenfolge, inner join reihenfolge, aufbau inner join, query aufbau, mysql union langsam, mysql join reihenfolge where, mysql reihenfolge join, mysql join query, join where reihenfolge, mysql inner select langsam, mysql join on, mysql join where, mysql joinreihenfolge, php mysql join

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