Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Verbesserung der Performanz dieses Statements

Empfohlene Antworten

Veröffentlicht

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

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

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

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.

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.