如何解决TSQL INFORMATION_SCHEMA.COLUMNS VS sys.columns VS COL_LENGTH'Table','ColumnName'
我发现了这几种变化以检查列是否存在。一些评论说访问INFORMATION_SCHEMA
视图或sys.columns
会击中磁盘,而COL_LENGTH
使用缓存的数据库,但我并不真正理解它的含义。
我找不到任何东西可以解释模式如何在磁盘上存储,如何缓存以及这三个选项之间的性能差异。
有人可以向我解释吗?
解决方法
SQL Server存储有关您的数据库及其内容的元数据。通常可以通过sys.
表和information_schema.
视图来访问它们。
sys表在某种程度上特定于SQL Server,并且倾向于相当规范化。相反,information_schema视图(与您可能创建的其他许多报告视图一样)以更易读的格式提供数据-它们通常将各种sys表连接在一起以得到结果。有关更多信息,请参见Difference between Information_schema vs sys tables in SQL Server。
COL_LENGTH()是在数据库上运行的函数,不需要像这样“读取数据”。
但是,出于所有实际目的,您会发现两者之间的差异为零。如果您仅在特定列的列长度之后,请使用COL_LENGTH,因为它可能会稍快一些。否则,请随意使用information_schema视图,因为它们获取元数据的次数很少,因此它们提供了更易于阅读的信息(或一组自定义的sys表连接在一起)。
例如,我有一个用于测试的表,称为“ test”,具有5列(ID和col2,col3,col4,col5)。它有近200万行,但是实际上不需要读取该表中的任何数据-仅元数据。
我运行了命令以从每个命令中获取列长/信息。每个完成需要0.000秒(例如,不到1毫秒)。以下是命令和结果(仅前10列),以演示其中的一些差异。
SELECT col_length('dbo.test','col2') AS Col2_info
/*
Col2_info
100
*/
SELECT * FROM sys.columns where object_id = (SELECT TOP 1 object_id FROM sys.objects WHERE name = 'test')
/*
object_id name column_id system_type_id user_type_id max_length precision scale collation_name is_nullable is_ansi_padded
2094630505 ID 1 56 56 4 10 0 NULL 0 0
2094630505 col2 2 167 167 100 0 0 Latin1_General_CI_AS 0 1
2094630505 col3 3 167 167 100 0 0 Latin1_General_CI_AS 1 1
2094630505 col4 4 167 167 100 0 0 Latin1_General_CI_AS 1 1
2094630505 col5 5 167 167 100 0 0 Latin1_General_CI_AS 1 1
*/
SELECT * from information_schema.COLUMNS where table_name = 'test'
/*
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH
Testdb dbo test ID 1 NULL NO int NULL
Testdb dbo test col2 2 NULL NO varchar 100
Testdb dbo test col3 3 NULL YES varchar 100
Testdb dbo test col4 4 NULL YES varchar 100
Testdb dbo test col5 5 NULL YES varchar 100
*/
请注意,在上述版本中,sys.columns版本较难:a)难以构建,因为它仅与test_table的object_id有关;而且它提供的数据比information_schema版本的可读性差很多。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。