| | | | |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | |
| Erfahrener Benutzer Registriert seit: 17.01.2006
Beiträge: 468
![]() | OT ich habe meine erste Datenbanken-Erfahrungen mit Oracle gemacht und habe subquerys gerne verwendet. Erste Schok, dass ich bei entwicklung mit mysql 3 erlebt habe "Sch... subqueris gibt es gar nicht". Ich habe ziemlich viele graue Hirnzellen verbrannt Jetzt pogrammiere ich etwa 5 Jahren PHP-Mysql und habe mich so stark an JOIN syntax angewönt, dass ich subquerys irgendwie vermeiden versuche. und jetzt mal über Performance. Was schneller ist kann nur BENCHMARK() zeigen, und es kann wohl sein, dass die Ergebnise von einer version zu anderer sich unterscheiden können. jeder SQL ausdruk wird bei einer Datenbank-System durch ein parser gejagt, es kann wohl sein, dass ein subquery-syntax für der parser aufwendiger(ein paar 0.0001 sec) als join-syntax ist, aber am ende gibt es nur ein array mit zeigern auf die native datenbank-funktionen. Wenn dieser Array optimal aufgebaut ist, dann wird auch der Datenbank die bessere und schnellere Ergebnise liefern. Der SQL-Parser ändert sich aber auch von Version zur Version und es kann vorkommen, dass die Geschwindigkeit-unterschiede bei diesen 3 Abfragen bei nächster version überhaupt nicht mehr da sind. und jetzt mal reale fakten nach dem ich auf der console BENCHMARK() mit 10000000 wiederholungen gemacht habe, dann habe ich die Ergebnise bekommen, die ich eigentlich nicht erwartet habe abfrage 1 (erste Platz) 1.16 sec abfrage 3 (zweite Platz) 1.22 sec abfrage 2( lol) 1.25 sec edit: die tabelle ist aber klein, mit nur 56 einträgen, es muss natürlich bei den grösseren tabellen getestet werden. mysql version 5.0.21 |
| | |
| | |
| Erfahrener Benutzer Registriert seit: 21.05.2008
Beiträge: 9.937
![]() | Nein du kannst die WHERE-Bedingung nicht in die ON-Bedingung schreiben. Denn die ON-Bedingung stellt nur fest, ob dieser Datensatz gejoint werden soll oder nicht. Dadurch multipliziert sich dein Ergebnis. Ehrlich gesagt hat es mich überhaupt gewundert, dass man in WHERE-Bedingung Bezug auf den JOIN nehmen kann, ich habe das nur zufällig bei einem "Fehler" festgestellt (der dann keiner war). Das mit dem Benchmark ist so eine Sache, wer weiß schon was für Prozesse in diesen 1.16 Sekunden noch nebenher laufen. Ein Status-Check vom Messanger und 50ms hängen am Ergebnis. Wichtig für die Performance sind aber bestimmt auch die richtigen Indexe. Aber besser kein Tipp als ein falscher! Darum betone ich nochmal, dass ich nur spekuliere, fundierte Kenntnisse in MySQL-Performance habe ich nicht. In Datenbank-Fachforen bist du da vielleicht besser beraten. Die Meisten hier sind ja lediglich Datenbank-Anwender. |
| | |
| | |
| Erfahrener Benutzer | Du triffst es: Im Endeffekt fliegt alles durch einen Parser. Und genau da find ichs "witzig". Der Parser übersetzt den Code ja in einen system-näheren Code. In einem Forum las ich, dass mein Beispiel 1 quasi gleichbedeutend ist mit dem Beispiel 2. So mal jetzt zum Beispiel
__________________ Nicht jeder Fehler ist ein Bug. |
| | |
| | |
| Erfahrener Benutzer Registriert seit: 17.01.2006
Beiträge: 468
![]() | wenn ich aber ein Wahl zwischen Variante 1 und 2 habe, würde ich besser 2-te verwenden. schon aus dem Grund, dass durch join die code eifach besser lesbar ist. mann kann bei JOINS "visuel" besser ein Unterschied zwischen dem Tabellenverbund und Auswahl-bedingungen sehen. Bei dem Verbienden von 2 tabellen ist diese Lesbarkeit vielleicht nicht so relevant, aber bei verbund von 4 oder 5 Tabellen wird es aber ziemlich schwer in einer langer Where -Bedingung richtige Tabellen-verbund zu finden. Und da ich lediglich auch nur ein DB-Anwender bin, werde ich besser auf ein paar 0.0001 sekunden performance verzichten um mir bessere Lesbarkeit zu schaffen. OT: Jetzt bin ich selbst richtig verzweifelt . kann sein, dass ich morgen alles zurück nehme und werde gegenteil behaupten |
| | |
| | |
| Erfahrener Benutzer Registriert seit: 21.05.2008
Beiträge: 9.937
![]() | Eigentlich sollte der Test ja sehr einfach zu machen sein. Zwei Tabelle mit jeweils mehreren hunderttausend Einträgen anlegen und nochmal beides benchmarken, auch jeweils ein paar Millionen mal. @Slava: Wie benchmarke ich denn ein komplettes Statement, meintest du SELECT BENCHMARK()? Die kannte ich garnicht und laut Manual gehen ja auch nur Ausdrücke?! |
| | |
| | |
| Erfahrener Benutzer Registriert seit: 17.01.2006
Beiträge: 468
![]() | select benchmark(anzahl_von_wiederholungen,'select feld from ....where subquerys...'); also das geht auch mit querys, aber ergebnis von query muss nur eine spalte und eine zeile liefern (nur 1 wert), sonnst funktioniert das nicht. http://dev.mysql.com/doc/refman/5.1/...functions.html mit PHPmyadmin geht das auch nicht, also konsole benutzen. ergebnis ist immer 0. Aber nach der abfrage kommt meldung wieviele sekunden es gelaufen hat. stell ruhig anzahl_von_wiederholungen auf 10000000 |
| | |
|
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| [Erledigt] Select über zwei Tabellen / Performanceproblem | Wolla | Datenbanken | 20 | 15.06.2008 00:58 |
| select mit inhalten aus mehreren Tabellen | wurtzel | Datenbanken | 6 | 02.12.2006 17:37 |
| SELECT aus 2 Tabellen | jens21 | Datenbanken | 3 | 30.08.2006 00:54 |
| [Erledigt] SELECT aus zwei "gleichen" Tabellen | patr1k | Datenbanken | 2 | 05.07.2006 11:57 |
| Select über zwei Tabellen | danix-dj | PHP Tipps 2006 | 11 | 22.05.2006 15:13 |
| Select über 2 Tabellen | MasterMind | Datenbanken | 11 | 08.04.2006 11:43 |
| Select über mehrere tabellen | Sclot | Datenbanken | 14 | 24.11.2005 16:56 |
| [Erledigt] SELECT * FROM 2 Tabellen - Problem | Datenbanken | 1 | 01.09.2005 16:30 | |
| select über drei Tabellen | Sonja | PHP Tipps 2005 | 10 | 12.05.2005 14:27 |
| SELECT über 4 Tabellen mit DISTINC | PHP Tipps 2005 | 2 | 08.03.2005 19:50 | |
| Select mit 2 Tabellen | Sonja | PHP Tipps 2005 | 5 | 13.02.2005 12:49 |
| mehrere tabellen verknüpfen bei select | Datenbanken | 3 | 29.09.2004 11:00 | |
| [Erledigt] INSERT INTO SELECT an mehrere Tabellen? | Datenbanken | 6 | 17.09.2004 16:57 | |
| [Erledigt] 2 mal select 1 form | PHP-Fortgeschrittene | 1 | 01.09.2004 20:13 | |
| [Erledigt] Join für Select Count(`id`)-Abfrage über 4 Tabellen | Datenbanken | 4 | 10.07.2004 18:32 | |
| Besucher kamen über folgende Suchanfragen bei Google auf diese Seite |
| oracle select mehrere tabellen, http://www.php.de/datenbanken/43763-select-ueber-zwei-tabellen.html, oracle abfrage über zwei tabellen, oracle select aus zwei tabellen, oracle select über mehrere tabellen, oracle select aus mehreren tabellen, oracle sql select 2 tabellen, oracle select zwei tabellen, oracle select von mehreren tabellen, oracle select aus 2 tabellen, select from über zwei tabellen performance, select zwei tabellen, oracle select 3 tabellen, abfrage über mehrere tabellen oracle, oracle select über zwei tabellen, oracle differenz, oracle sql select zwei tabellen, oracle select alle tabellen, select auf zwei tabellen, php oracle select join feldnamen gleich |

Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.