SQL Server:我应该在sys表上使用information_schema表吗?

juu*_*uur 49 sql sql-server stored-procedures metadata sql-server-2008

在SQL Server中,有两种元数据模式:

  • INFORMATION_SCHEMA
  • SYS

我听说INFORMATION_SCHEMA表是基于ANSI标准的.在开发例如存储过程时,是否应该INFORMATION_SCHEMAsys表上使用表格?

Mar*_*ith 32

除非您正在编写一个您知道的应用程序需要可移植的应用程序,或者您只需要非常基本的信息,否则我将默认使用专有的SQL Server系统视图.

Information_Schema意见只能说明是与SQL-92标准兼容的对象.这意味着即使是非常基本的结构(如索引)也没有信息模式视图(这些结构未在标准中定义,而是作为实现细节保留.)更不用说任何SQL Server专有功能.

此外,它可能不是人们可以假设的便携性的灵丹妙药.实现在系统之间仍然存在差异.Oracle根本没有"开箱即用"地实现它,MySql文档说:

SQL Server 2000的用户(也遵循该标准)可能会注意到强烈的相似性.但是,MySQL省略了许多与我们的实现无关的列,并添加了特定于MySQL的列.其中一个列是INFORMATION_SCHEMA.TABLES表中的ENGINE列.

即使对于面包和黄油SQL构造(例如外键约束),Information_Schema视图的处理效率也远低于sys.视图,因为它们不会公开允许有效查询的对象ID.

例如,查看问题SQL查询从1秒减慢到11分钟 - 为什么?和执行计划.

INFORMATION_SCHEMA

计划

SYS

计划


cod*_*ger 31

我总是尝试使用Information_schema视图sys直接查询架构.

视图符合ISO标准,因此从理论上讲,您应该能够轻松地跨不同的RDBMS迁移任何查询.

但是,在某些情况下,我需要的信息在视图中不可用.

我提供了一些链接,其中包含有关视图和查询SQL Server目录的更多信息.

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

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

  • 是的,我同意 - 只要您需要/希望在数据库之间"可移植".如果你100%的SQL Server工作,我通常使用"sys".目录视图,因为那些更完整,更简洁,更有条理(在我看来) - 完全知道这些查询不适用于DB2或MySQL ... (19认同)

Pet*_*hia 10

INFORMATION_SCHEMA更适合可能需要与各种数据库连接的外部代码.一旦你开始数据库中编程,可移植性就会消失.如果您正在编写存储过程,那就告诉我您已经致力于特定的数据库平台(无论好坏).如果您已经提交到SQL Server,那么请务必使用这些sys视图.