49 votes

SQL Server: devrais-je utiliser des tables information_schema sur des tables sys?

Dans SQL Server, il existe deux schémas pour les métadonnées:

  • INFORMATION_SCHEMA
  • SYS

J'ai entendu dire que les tables INFORMATION_SCHEMA sont basées sur la norme ANSI. Lors de l' élaboration , par exemple les procédures stockées, devrait - il être judicieux d'utiliser INFORMATION_SCHEMA tables plus sys tables?

32voto

Martin Smith Points 174101

Sauf si vous écrivez une application qui vous savez pour un fait besoin d'être portable ou que vous ne voulez tout de l'information de base, je voudrais juste valeur par défaut à l'aide de la propriété SQL Server système de points de vue pour commencer.

L' Information_Schema vues afficher uniquement les objets qui sont compatibles avec la norme SQL-92. Cela signifie qu'il n'y est aucune information de schéma vue de même assez constructions de base, tels que l'index (ce ne sont pas définis dans la norme et sont partis comme des détails de mise en œuvre.) Encore moins une quelconque SQL Server fonctions exclusives.

Même pour le pain et le beurre SQL constructions telles que les contraintes de clé étrangère de la Information_Schema vues peuvent être considérablement moins efficace de travailler avec de l' sys. vues qu'ils n'exposent pas les id d'objet qui permettrait efficace de l'interrogation.

Voir, par exemple, la question de requête SQL ralentissement de 1 seconde à 11 minutes - pourquoi? et les plans d'exécution.

INFORMATION_SCHEMA

Plan

sys

Plan

31voto

Barry Points 18913

Je serais toujours essayer d'utiliser l' Information_schema vue sur l'interrogation de l' sys schéma directement.

Les Vues sont conformes à ISO donc, en théorie, vous devriez être en mesure de migrer facilement à toutes les requêtes à travers les différents SGBDR.

Cependant, il ya eu quelques cas où les informations que j'ai besoin est tout simplement pas disponible dans une vue.

J'ai fourni des liens avec de plus amples informations sur les points de vue et l'interrogation d'un Catalogue SQL Server.

http://msdn.microsoft.com/en-us/library/ms186778.aspx

http://msdn.microsoft.com/en-us/library/ms189082.aspx

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X