Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Server:dovrei usare le tabelle information_schema su tabelle sys?

A meno che tu non stia scrivendo un'applicazione che sai per certo dovrà essere portatile o desideri solo informazioni di base, per impostazione predefinita utilizzerei le viste di sistema proprietarie di SQL Server per cominciare.

Lo Information_Schema le viste mostrano solo gli oggetti compatibili con lo standard SQL-92. Ciò significa che non esiste una visualizzazione dello schema delle informazioni nemmeno per costrutti abbastanza semplici come gli indici (questi non sono definiti nello standard e vengono lasciati come dettagli di implementazione). Per non parlare delle funzionalità proprietarie di SQL Server.

Inoltre non è proprio la panacea per la portabilità che si possa presumere. Le implementazioni differiscono ancora tra i sistemi. Oracle non lo implementa affatto "out of the box" e i documenti MySql dicono:

Gli utenti di SQL Server 2000 (che segue anche lo standard) potrebbero notare una forte somiglianza. Tuttavia, MySQL ha omesso molte colonne che non sono rilevanti per la nostra implementazione e ha aggiunto colonne specifiche per MySQL. Una di queste colonne è la colonna ENGINE nella tabella INFORMATION_SCHEMA.TABLES.

Anche per i costrutti SQL bread and butter come i vincoli di chiave esterna, lo Information_Schema le viste possono essere notevolmente meno efficienti da utilizzare rispetto a sys. viste in quanto non espongono ID oggetto che consentirebbero query efficienti.

per esempio. Vedere la domanda Rallentamento della query SQL da 1 secondo a 11 minuti - perché? e piani di esecuzione.

INFORMATION_SCHEMA

sistema