Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Recuperar as 10 principais linhas sem usar TOP ou LIMIT? – Pergunta da Entrevista da Semana #247

Pergunta: Recuperar as 10 principais linhas sem usar TOP ou LIMIT?

Resposta: Quando me fizeram essa pergunta em minha recente Verificação abrangente de integridade do desempenho do banco de dados , perguntei de volta à pessoa por que ela quer reinventar a roda. No entanto, quando recebi sua resposta, agora realmente concordo com o raciocínio.


Aqui está o motivo:  Não queremos usar TOP ou LIMIT, pois eles não são uma implementação ANSI. Queremos recuperar as primeiras linhas de forma que possam funcionar em diferentes bancos de dados, como SQL Server, MySQL, MariaDB e PostgreSQL.

Todos os bancos de dados implementaram sua própria lógica para recuperar as linhas superiores. SQL Server usa TOP palavras-chave enquanto MySQL, MariaDB e PostgreSQL usam o LIMIT palavra-chave para restringir as linhas no SQL Server. Isso apresenta desafios únicos para fornecedores terceirizados que estão escrevendo código que pode ser conectado a qualquer RDBMS. Eles têm que escrever o código com as condições e manter duas versões diferentes da lógica. No entanto, se você usar o método a seguir, ele funcionará em todas as versões recentes dos bancos de dados relacionais.

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;

Isso funcionará com todos os bancos de dados relacionais conhecidos que encontrei. Embora gostemos de usar TOP e LIMIT com frequência, é recomendável continuar usando a lógica que funciona em vários bancos de dados relacionais.

Aqui estão outras postagens do blog que você pode achar interessantes:

  • SQL SERVER – Desativando a opção de configuração do servidor de reforço de prioridade no SSMS 18 em diante
  • SQL SERVER – Script de exemplo para verificar a fragmentação do índice com RowCount
  •  Quebra-cabeça SQL – Criação de esquema e tabela – Resposta sem código em execução
  • Como saber se o índice é forçado na consulta? – Pergunta da entrevista da semana nº 246