Portal > Foren > Datenbanken, Server, Betriebssysteme und sonstige Programmiersprachen > Datenbanken > Beste Lösung Datensatz mit MIN/MAX(spalte) abrufen
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 19.06.2008, 00:08 Nach oben    #1
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.204
Standard Beste Lösung Datensatz mit MIN/MAX(spalte) abrufen

Aktuell hab ich folgende Ansätze und Ideen (selbst erstellt, ergoogelt und soweiter), alle bis jetzt nicht gebenchmarkt, nur ein paar Gedanken dazu gemacht.
Da es für eine dynamischen Sache ist, die variabel für verschiedene Tabellen genutzt werden soll, steht also kein DB-Design fest (z.b. Indizes der Spalten).
Was feststeht ist, dass rein theoretisch ( im Fall konsistenter Daten ) myColumn einen eindeutigen maximalen Wert enthält und somit nur maximal 1 Datensatz vorhanden ist auf den MIN oder MAX zutrifft

Bevor ich anfange mit Benchmarks wollte ich wissen, ob es eventuell noch weitere Methoden gibt die ich bedenken sollte. Die Anforderungen sind bis jetzt noch nicht klar, ob mysql 4, 4.1, 5.0 oder 5.1, ich denke allerdings es läuft auf 4.1 oder 5.1 raus, eventuell auch eine versionsabhängige Variante.

Vielleicht kennt ja jemand noch eine Variante, vielleicht irgendwas spezifisches was erst ab einer gewissen Version möglich ist, mit der es einfacher / schneller geht.

Variante 1)
Code:
SELECT * FROM myTable ORDER BY myColumn DESC LIMIT 1
-> Sortiert temporär die komplette Tabelle -> umso größer die Tabelle umso aufwendiger wird es und damit langsamer wird es

Variante 2)
Code:
SELECT MAX(myColumn ) AS maxColumn FROM myTable
SELECT * FROM myTable WHERE myColumn = %maxColumn%
-> 2 Querys

Variante 2.1)
Code:
SELECT @maxColumn := MAX(myColumn ) FROM myTable
SELECT * FROM myTable WHERE myColumn = @maxColumn
-> 2 Querys wie 2) Overhead des Auslesens aus dem Result und anschließendes übergeben auf php-Seite fällt weg.

Variante 2.2)
Code:
SELECT * FROM myTable WHERE myColumn IN ( SELECT MAX(myColumn) FROM myTable )
-> erfordert Subquerys und damit min. mysql 4.1

mfg
robo47
robo47 ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.07.2008, 09:05 Nach oben    #2
Erfahrener Benutzer
 
Benutzerbild von JumperII
 
Registriert seit: 27.02.2006
Beiträge: 159
Standard

Hallo,

zwar etwas verspätet ...

In der Variante 1 ermittelst Du genau einen Eintrag, egal, ob es mehrere davon gibt oder nicht.

In der Variante 2 ermittelst Du von vornherein alle Eintäge mit dem Maximum

Daher sind die beiden Varianten nicht direkt vergleichbar.

Gruß,
Jumper, the II.
JumperII ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

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 sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
logik datensatz identifikation richy PHP-Programmierung 12 09.04.2008 16:45
Was wäre euerer Meinung nach die beste Lösung ? morph182 PHP-Programmierung 1 10.12.2005 20:16


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:35 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45