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

SQL Server :dois-je utiliser des tables information_schema plutôt que des tables sys ?

À moins que vous n'écriviez une application dont vous savez pertinemment qu'elle devra être portable ou que vous ne vouliez que des informations assez basiques, j'utiliserais par défaut les vues système propriétaires de SQL Server pour commencer.

Le Information_Schema les vues affichent uniquement les objets compatibles avec la norme SQL-92. Cela signifie qu'il n'y a pas de vue de schéma d'informations pour les constructions même assez basiques telles que les index (ceux-ci ne sont pas définis dans la norme et sont laissés en tant que détails d'implémentation.) Sans parler des fonctionnalités propriétaires de SQL Server.

De plus, ce n'est pas tout à fait la panacée pour la portabilité que l'on peut supposer. Les implémentations diffèrent encore d'un système à l'autre. Oracle ne l'implémente pas du tout "prêt à l'emploi" et la documentation MySql indique :

Les utilisateurs de SQL Server 2000 (qui suit également la norme) peuvent remarquer une forte similitude. Cependant, MySQL a omis de nombreuses colonnes qui ne sont pas pertinentes pour notre implémentation et a ajouté des colonnes spécifiques à MySQL. L'une de ces colonnes est la colonne ENGINE dans la table INFORMATION_SCHEMA.TABLES.

Même pour les constructions SQL de pain et de beurre telles que les contraintes de clé étrangère, le Information_Schema les vues peuvent être considérablement moins efficaces à utiliser que le sys. vues car elles n'exposent pas les identifiants d'objet qui permettraient une interrogation efficace.

par exemple. Voir la question Ralentissement des requêtes SQL de 1 seconde à 11 minutes - pourquoi ? et plans d'exécution.

INFORMATION_SCHEMA

sys