Fenixxus Geschrieben 28. Mai 2009 Geschrieben 28. Mai 2009 Hi zusammen, ich habe folgendes Statement, wo ich aber nicht weiß, ob man das noch weiter optimieren kann. Der Zweck ist es die Zeile der Tabelle auszugeben, die die höchste ID hat: SELECT * FROM MeineTabelle t WHERE t.id = (SELECT MAX(t.id) FROM MeineTabelle) ORDER BY t.id DESC LIMIT 1 Ist da noch Performancepotenzial? Gruß Fenixxus Zitieren
dbwizard Geschrieben 28. Mai 2009 Geschrieben 28. Mai 2009 Hi zusammen, ich habe folgendes Statement, wo ich aber nicht weiß, ob man das noch weiter optimieren kann. Der Zweck ist es die Zeile der Tabelle auszugeben, die die höchste ID hat: SELECT * FROM MeineTabelle t WHERE t.id = (SELECT MAX(t.id) FROM MeineTabelle) ORDER BY t.id DESC LIMIT 1 Ist da noch Performancepotenzial? Gruß Fenixxus - das ORDER BY sowie das LIMITsolltest du dir sparen können, vorausgesetzt deine id ist ein PK oder zumindest Unique - Ich nehme im weiteren an, dass du auf diesem Attribut eine Index gesetzt hast Gruss Zitieren
Reinhold Geschrieben 28. Mai 2009 Geschrieben 28. Mai 2009 Moin, SELECT * FROM MeineTabelle t WHERE t.id = ( SELECT MAX(t.id) FROM MeineTabelle ) ORDER BY t.id DESC LIMIT 1 das sollte im Ergebnis identisch sein, obs schneller geht musst du mal probieren: SELECT * FROM MeineTabelle ORDER BY id DESC LIMIT 1 hth Reinhold Zitieren
Fenixxus Geschrieben 28. Mai 2009 Autor Geschrieben 28. Mai 2009 Ich konnte es zwar noch nicht nachmessen, weil die Tabelle noch kaum Daten enthält, allerdings sollte es ohne Limit und Sortierung performanter sein. Vielen Dank dafür. Zitieren
dr.dimitri Geschrieben 29. Mai 2009 Geschrieben 29. Mai 2009 Sofern auf ID ein Index liegt, und ID wie der Name schon sagt eindeutig ist, sollte das auch bei Milliarden von Datensätzen eine Sache von ms sein(*). Für die maximale ID muss die DB einfach nur den letzten Eintrag im Index lesen (also auf dem Block ganz rechts), und anschließend mit diesem Wert nochmal auf den Index zugreifen, daraus die Zeile in der Tabelle ermitteln und diese zurückgeben. Ist die ID eindeutig, kannst Dir das LIMIT sparen. ORDER BY kannst auf jeden Fall weglassen, da alle ID Spalten ja den gleichen Wert haben. Dim (*) Hab das grade mal bei einer 220 Mio Zeilen Tabelle in Oracle probiert: 94ms beim ersten, 47ms beim zweiten Aufruf. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.