Pytanie: Pobrać TOP 10 rzędów bez użycia TOP lub LIMIT?
Odpowiedź: Kiedy zadano mi to pytanie w mojej ostatniej kompleksowej kontroli stanu wydajności bazy danych , spytałem z powrotem do osoby, dlaczego chce ponownie wynaleźć koło. Jednak kiedy otrzymałem jego odpowiedź, teraz naprawdę zgadzam się z rozumowaniem.
Oto powód: Nie chcemy używać TOP ani LIMIT, ponieważ w rzeczywistości nie są one implementacją ANSI. Chcemy pobrać górne wiersze w taki sposób, aby mógł działać w różnych bazach danych, takich jak SQL Server, MySQL, MariaDB, a także PostgreSQL.
Wszystkie bazy danych zaimplementowały własną logikę pobierania górnych wierszy. SQL Server używa TOP słowa kluczowe, podczas gdy MySQL, MariaDB i PostgreSQL używają LIMIT słowo kluczowe, aby ograniczyć wiersze w SQL Server. Stanowi to wyjątkowe wyzwanie dla dostawców zewnętrznych, którzy piszą kod, który można podłączyć do dowolnego RDBMS. Muszą napisać kod z warunkami i utrzymywać dwie różne wersje logiki. Jeśli jednak użyjesz następującej metody, będzie ona działać we wszystkich najnowszych wersjach relacyjnych baz danych.
SELECT ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_DEFINITIONFROM (SELECT ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_DEFINITION,ROW_NUMBER() OVER (KOLEJNOŚĆ WEDŁUG ROUTINE_NAME) AS ROWNUMFROM INFORMATION_SCHEMA.ROUTINESWHERE ROUTINE_TYPEROW '> 'NUMPROCEDURETo będzie działać ze wszystkimi znanymi relacyjnymi bazami danych, z którymi się zetknąłem. Chociaż uwielbiamy często używać TOP i LIMIT, zaleca się, abyśmy nadal używali logiki, która działa w wielu relacyjnych bazach danych.
Oto inne posty na blogu, które mogą Cię zainteresować:
- SQL SERVER – Wyłączanie opcji konfiguracji serwera zwiększania priorytetu w SSMS od 18 roku
- SQL SERVER – przykładowy skrypt sprawdzający fragmentację indeksu za pomocą RowCount
- Zagadka SQL – tworzenie schematów i tabel – odpowiedź bez uruchamiania kodu
- Jak się dowiedzieć, czy indeks jest wymuszany na zapytaniu? – Pytanie do wywiadu tygodnia #246