Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Pobierz TOP 10 rzędów bez użycia TOP lub LIMIT? – Wywiad Pytanie tygodnia #247

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 '> 'NUMPROCEDURE 

To 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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie można zmienić kolumny używanej w ograniczeniu klucza obcego

  2. Jak uzyskać pierwszy dzień każdego miesiąca w mysql?

  3. Funkcja MySQL ROUND() — zaokrąglanie liczby do podanej liczby miejsc dziesiętnych

  4. Zapytania MySQL

  5. Klasy zagnieżdżone — CustomRowMapper !! To już nie problem!! - Część 2