Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server:sollte ich information_schema-Tabellen über sys-Tabellen verwenden?

Sofern Sie nicht eine Anwendung schreiben, von der Sie sicher wissen, dass sie portabel sein muss, oder wenn Sie nur ganz grundlegende Informationen wünschen, würde ich zunächst standardmäßig die proprietären SQL Server-Systemansichten verwenden.

Das Information_Schema Ansichten zeigen nur Objekte, die mit dem SQL-92-Standard kompatibel sind. Das bedeutet, dass es keine Informationsschemaansicht gibt, selbst für ziemlich einfache Konstrukte wie Indizes (Diese sind nicht im Standard definiert und werden als Implementierungsdetails belassen.) Ganz zu schweigen von irgendwelchen proprietären SQL Server-Features.

Außerdem ist es nicht ganz das Allheilmittel für Portabilität, das man annehmen könnte. Die Implementierungen unterscheiden sich immer noch zwischen den Systemen. Oracle implementiert es überhaupt nicht "out of the box", und die MySql-Dokumentation sagt:

Benutzer von SQL Server 2000 (das ebenfalls dem Standard folgt) bemerken möglicherweise eine starke Ähnlichkeit. MySQL hat jedoch viele Spalten weggelassen, die für unsere Implementierung nicht relevant sind, und Spalten hinzugefügt, die MySQL-spezifisch sind. Eine solche Spalte ist die Spalte ENGINE in der Tabelle INFORMATION_SCHEMA.TABLES.

Auch für Brot-und-Butter-SQL-Konstrukte wie Foreign Key Constraints gilt das Information_Schema Die Arbeit mit Ansichten kann erheblich weniger effizient sein als mit sys. Ansichten, da sie keine Objekt-IDs offenlegen, die eine effiziente Abfrage ermöglichen würden.

z.B. Siehe die Frage Verlangsamung der SQL-Abfrage von 1 Sekunde auf 11 Minuten – warum? und Ausführungspläne.

INFORMATION_SCHEMA

sys