Mysql
 sql >> Base de données >  >> RDS >> Mysql

Récupérer les 10 lignes TOP sans utiliser TOP ou LIMIT ? – Question d'entrevue de la semaine #247

Question : Récupérer le TOP 10 des lignes sans utiliser TOP ou LIMIT ?

Réponse : Lorsqu'on m'a posé cette question dans mon récent Vérification complète de l'état des performances de la base de données , j'ai demandé à la personne pourquoi il voulait réinventer la roue. Cependant, lorsque j'ai reçu sa réponse, je suis maintenant vraiment d'accord avec le raisonnement.

Voici la raison :  Nous ne voulons pas utiliser TOP ou LIMIT car ils ne sont en fait pas une implémentation ANSI. Nous voulons récupérer les premières lignes de manière à ce qu'elles puissent fonctionner sur différentes bases de données comme SQL Server, MySQL, MariaDB ainsi que PostgreSQL.

Toutes les bases de données ont implémenté leur propre logique pour récupérer les premières lignes. SQL Server utilise TOP mots-clés alors que MySQL, MariaDB et PostgreSQL utilisent la LIMIT mot-clé pour restreindre les lignes dans SQL Server. Cela présente des défis uniques pour les fournisseurs tiers qui écrivent du code pouvant être connecté à n'importe quel SGBDR. Ils doivent écrire des conditions de code et maintenir deux versions différentes de la logique. Cependant, si vous utilisez la méthode suivante, cela fonctionnera dans toutes les versions récentes des bases de données relationnelles.

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;

Cela fonctionnera avec toutes les bases de données relationnelles connues que j'ai rencontrées. Bien que nous aimions souvent utiliser TOP et LIMIT, il est recommandé de continuer à utiliser la logique qui fonctionne sur plusieurs bases de données relationnelles.

Voici d'autres articles de blog qui pourraient vous intéresser :

  • SQL SERVER - Désactivation de l'option de configuration du serveur Priority Boost sur SSMS 18 et ultérieur
  • SQL SERVER – Exemple de script pour vérifier la fragmentation d'index avec RowCount
  •  Puzzle SQL – Création de schémas et de tables – Réponse sans exécuter de code
  • Comment savoir si l'index est forcé sur la requête ? – Question d'entretien de la semaine #246