Mysql
 sql >> база данни >  >> RDS >> Mysql

Извличане на ТОП 10 реда, без да използвате TOP или LIMIT? – Въпрос за интервю на седмицата #247

Въпрос: Извличане на ТОП 10 реда, без да използвате TOP или LIMIT?

Отговор: Когато ми беше зададен този въпрос в неотдавнашната ми Изчерпателна проверка на ефективността на базата данни , попитах обратно на човека защо иска да изобрети колелото. Въпреки това, когато получих отговора му, сега наистина съм съгласен с разсъжденията.

Ето причината:  Не искаме да използваме TOP или LIMIT, тъй като те всъщност не са ANSI реализация. Искаме да извлечем горните редове по такъв начин, че да може да работи в различни бази данни като SQL Server, MySQL, MariaDB, както и PostgreSQL.

Всички бази данни са внедрили собствена логика за извличане на горните редове. SQL Server използва TOP ключови думи, докато MySQL, MariaDB и PostgreSQL използват LIMIT ключова дума за ограничаване на редовете в SQL Server. Това представлява уникални предизвикателства пред доставчиците на трети страни, които пишат код, който може да бъде включен във всяка RDBMS. Те трябва да напишат код за вещица условия и да поддържат две различни версии на логиката. Ако обаче използвате следния метод, той ще работи във всички последни версии на релационните бази данни.

ИЗБЕРЕТЕ ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_DEFINITIONFROM (ИЗБЕРЕТЕ ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_DEFINITION,ROW_NUMBER() НАД (ПОРЪЧКА ПО ROUTINE_NAME) КАТО ROWNUMFROM INFORMATION_SCHEMA.ROUTINESWHERE'=ROUTINESWHERE'=ROUTINESWHERE'=ROUTC_WHERE'=ROUTINESWHERE'ROUTC 

Това ще работи с всички познати релационни бази данни, на които съм попадал. Въпреки че обичаме често да използваме TOP и LIMIT, се препоръчва да продължим да използваме логиката, която работи в множество релационни бази данни.

Ето други публикации в блога, които може да ви бъдат интересни:

  • SQL SERVER – Изключване на опцията за конфигурация на сървъра с приоритет за усилване на SSMS 18 по-нататък
  • SQL SERVER – Примерен скрипт за проверка на фрагментацията на индекса с RowCount
  •  SQL пъзел – Създаване на схема и таблица – Отговор без изпълнение на код
  • Как да разбера дали индексът е принуден при заявка? – Въпрос за интервю на седмицата #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. Как да получите общия брой потребители на ден в MySQL

  2. mysql заявката показва множество таблици от една колона с идентификатор

  3. Функция MySQL LEAST() – Намерете най-малкия аргумент в списък с аргументи

  4. Намерете най-добрите възможни начини за 2-ра най-висока заплата

  5. Най-бързият метод за архивиране и възстановяване на MySQL