Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Server:devo usar tabelas information_schema sobre tabelas sys?


A menos que você esteja escrevendo um aplicativo que você sabe que de fato precisará ser portátil ou você deseja apenas informações bastante básicas, eu usaria apenas as visualizações de sistema proprietárias do SQL Server para começar.

O Information_Schema exibições mostram apenas objetos que são compatíveis com o padrão SQL-92. Isso significa que não há exibição de esquema de informações nem mesmo para construções básicas, como índices (estes não são definidos no padrão e são deixados como detalhes de implementação). Muito menos quaisquer recursos proprietários do SQL Server.

Além disso, não é bem a panacéia para a portabilidade que se pode supor. As implementações ainda diferem entre os sistemas. A Oracle não o implementa "fora da caixa" e os documentos do MySql dizem:

Os usuários do SQL Server 2000 (que também segue o padrão) podem notar uma forte semelhança. No entanto, o MySQL omitiu muitas colunas que não são relevantes para nossa implementação e adicionou colunas específicas do MySQL. Uma dessas colunas é a coluna ENGINE na tabela INFORMATION_SCHEMA.TABLES.

Mesmo para construções SQL de pão e manteiga, como restrições de chave estrangeira, o Information_Schema podem ser dramaticamente menos eficientes para trabalhar do que o sys. views, pois não expõem ids de objetos que permitiriam consultas eficientes.

por exemplo. Veja a pergunta lentidão da consulta SQL de 1 segundo para 11 minutos - por quê? e planos de execução.

INFORMATION_SCHEMA



sistema