Mysql
 sql >> Datenbank >  >> RDS >> Mysql

TOP 10 Zeilen abrufen, ohne TOP oder LIMIT zu verwenden? – Interviewfrage der Woche #247

Frage: TOP 10 Zeilen abrufen ohne TOP oder LIMIT zu verwenden?

Antwort: Als mir diese Frage in meinem letzten Umfassenden Datenbankleistungs-Zustandscheck gestellt wurde , fragte ich die Person zurück, warum sie das Rad neu erfinden wolle. Als ich jedoch seine Antwort erhielt, stimme ich der Argumentation tatsächlich jetzt wirklich zu.

Hier ist der Grund:  Wir möchten TOP oder LIMIT nicht verwenden, da sie eigentlich keine ANSI-Implementierung sind. Wir möchten die obersten Zeilen so abrufen, dass sie über verschiedene Datenbanken wie SQL Server, MySQL, MariaDB sowie PostgreSQL hinweg funktionieren können.

Alle Datenbanken haben ihre eigene Logik implementiert, um die obersten Zeilen abzurufen. SQL Server verwendet TOP Schlüsselwörter, während MySQL, MariaDB und PostgreSQL das LIMIT verwenden Schlüsselwort, um die Zeilen im SQL Server einzuschränken. Dies stellt Drittanbieter, die Code schreiben, der in jedes RDBMS eingesteckt werden kann, vor einzigartige Herausforderungen. Sie müssen Code mit Bedingungen schreiben und zwei verschiedene Versionen der Logik pflegen. Wenn Sie jedoch die folgende Methode verwenden, funktioniert sie in allen neueren Versionen der relationalen Datenbanken.

SELECT ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_DEFINITION
FROM (
SELECT ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_DEFINITION,
ROW_NUMBER() OVER (ORDER BY ROUTINE_NAME) AS ROWNUM
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE='PROCEDURE'
) T
WHERE ROWNUM <11;

Das funktioniert mit allen mir bekannten relationalen Datenbanken. Obwohl wir es lieben, TOP und LIMIT oft zu verwenden, wird empfohlen, dass wir weiterhin die Logik verwenden, die über mehrere relationale Datenbanken hinweg funktioniert.

Hier sind weitere Blogbeiträge, die Sie vielleicht interessant finden:

  • SQL SERVER – Serverkonfigurationsoption „Priority Boost“ ab SSMS 18 deaktivieren
  • SQL SERVER – Beispielskript zur Überprüfung der Indexfragmentierung mit RowCount
  •  SQL-Puzzle – Schema- und Tabellenerstellung – Antwort ohne Ausführen von Code
  • Woher weiß ich, ob der Index bei der Abfrage erzwungen wird? – Interviewfrage der Woche #246