sql >> Base de Datos >  >> RDS >> Mysql

¿Recuperar las 10 filas TOP sin usar TOP o LIMIT? – Pregunta de la entrevista de la semana #247

Pregunta: ¿Recuperar las 10 primeras filas sin usar TOP o LIMIT?

Respuesta: Cuando me hicieron esta pregunta en mi reciente comprobación completa del estado del rendimiento de la base de datos , Le pregunté a la persona por qué quiere reinventar la rueda. Sin embargo, cuando recibí su respuesta, ahora realmente estoy de acuerdo con el razonamiento.

Esta es la razón:no queremos usar TOP o LIMIT ya que en realidad no son una implementación de ANSI. Queremos recuperar las filas superiores de tal manera que puedan funcionar en diferentes bases de datos como SQL Server, MySQL, MariaDB y PostgreSQL.

Todas las bases de datos han implementado su propia lógica para recuperar las filas superiores. SQL Server usa ARRIBA palabras clave mientras que MySQL, MariaDB y PostgreSQL usan el LIMIT palabra clave para restringir las filas en SQL Server. Esto presenta desafíos únicos para los proveedores externos que escriben código que se puede conectar a cualquier RDBMS. Tienen que escribir código con condiciones y mantener dos versiones diferentes de la lógica. Sin embargo, si usa el siguiente método, funcionará en todas las versiones recientes de las bases de datos relacionales.

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;

Esto funcionará con todas las bases de datos relacionales conocidas que he encontrado. Si bien nos encanta usar TOP y LIMIT a menudo, se recomienda que sigamos usando la lógica que funciona en múltiples bases de datos relacionales.

Aquí hay otras publicaciones de blog que pueden resultarle interesantes:

  • SQL SERVER:desactivar la opción de configuración del servidor Priority Boost en SSMS 18 en adelante
  • SERVIDOR SQL:secuencia de comandos de muestra para verificar la fragmentación del índice con RowCount
  •  Puzzle SQL:creación de esquemas y tablas:respuesta sin ejecutar código
  • ¿Cómo saber si se fuerza el índice en la consulta? – Pregunta de la entrevista de la semana #246