SQL2008数据库稀疏列确定列的转化_SQL SERVER数据库_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

SQL数据库 2008稀疏列确定列的转化[图]

作者:黑客防线网安SQL维护基地 来源:黑客防线网安SQL维护基地 浏览次数:0

本篇关键词:转化确定数据库
黑客防线网安网讯:  由于在SQL Server 2008中引入了新的稀疏列功能,现在就有可能把列声明为稀疏列并且任何时候在列中输入一个空值它都不会消耗任何空间。其中一个技巧是找出何时确定是否把一个列定义稀疏列...

  由于在SQL Server 2008中引入了新的稀疏列功能现在就有可能把列声明为稀疏列并且任何时候在列中输入一个空值它都不会消耗任何空间其中一个技巧是找出何时确定是否把一个列定义稀疏列

  在下面的例子中Address Lines 1 到 3是要求的,Address Lines 4和5是不要求的但是经常使用的,Address Lines 6到8很少使用。当创建Address Lines 6到8时,我们使用稀疏选项,这是因为我们知道这个数据很少存储下来。

   CREATE TABLE CustomerInfo
  (CustomerID INT PRIMARY KEY,
  Address_Line1 VARCHAR(100) NOT NULL,
  Address_Line2 VARCHAR(100) NOT NULL,
  Address_Line3 VARCHAR(100) NOT NULL,
  Address_Line4 VARCHAR(100) NULL,
  Address_Line5 VARCHAR(100) NULL,
  Address_Line6 VARCHAR(100) SPARSE NULL,
  Address_Line7 VARCHAR(100) SPARSE NULL,
  Address_Line8 VARCHAR(100) SPARSE NULL,
  )

  那么为什么不干脆把所有的列都声明为稀疏列呢?

  稀疏列需要额外的4个字节来在表中存储非空值固定长度数据类型值并且要求零字节来存储一个空值;因此,在每一个数据类型上拥有正确的阈值是很重要的,或者你可以使用更多的空间而不是获得它来结束。一个数据类型使用的字节越少,用来节约空间的空值百分比要求就越高。

  在MSDN的一张表中有使用稀疏列的建议百分比。看看这个可以帮助你确定何时可以获得使用稀疏列的益处。

  使用这张表作为准则,下面的脚本将会确认任何可能获得新的稀疏列功能的列。通过搜索数据库中超过一定阈值的空值的列,你可以很容易地分析结果并且确定这个新功能是否可用。固定长度列的阈值存储在一个临时表中。依赖于精确度和长度的数据类型将默认为60%。

   USE AdventureWorks
  GO
  SET NOCOUNT ON
  DECLARE @SQL VARCHAR(MAX)
  CREATE TABLE #SPARCEPERCENTAGE (
  DATATYPE VARCHAR(50),
  PRCENT INT)
  INSERT INTO #SPARCEPERCENTAGE
  SELECT 'bit', 98
  UNION ALL
  SELECT 'tinyint', 86
  UNION ALL
  SELECT 'smallint', 76
  UNION ALL
  SELECT 'int', 64
  UNION ALL
  SELECT 'bigint', 52
  UNION ALL
  SELECT 'real', 64
  UNION ALL
  SELECT 'float', 52
  UNION ALL
  SELECT 'smallmoney', 64
  UNION ALL
  SELECT 'money', 52
  UNION ALL
  SELECT 'smalldatetime', 64
  UNION ALL
  SELECT 'datetime', 52
  UNION ALL
  SELECT 'uniqueidentifier', 43
  UNION ALL
  SELECT 'date', 69
  CREATE TABLE #TMP (
  CLMN VARCHAR(500),
  NULLCOUNT INT,
  DATATYPE VARCHAR(50),
  TABLECOUNT INT)
  SELECT @SQL = COALESCE(@SQL,'') + CAST('INSERT INTO #TMP Select ''' + TABLE_SCHEMA + '.' + REPLACE(TABLE_NAME,'''','''''') + '.' + COLUMN_NAME + ''' AS Clmn, count(*) NullCount, ''' + DATA_TYPE + ''', (Select count(*) FROM ' + TABLE_SCHEMA + '.[' + TABLE_NAME + ']) AS TableCount FROM ' + TABLE_SCHEMA + '.[' + TABLE_NAME + '] WHERE [' + COLUMN_NAME + '] IS NULL ;' + CHAR(13) AS VARCHAR(MAX))
  FROM INFORMATION_SCHEMA.COLUMNS
  JOIN sysobjects B
  ON INFORMATION_SCHEMA.COLUMNS.TABLE_NAME = B.NAME
  WHERE XTYPE = 'U'

    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-9763-1.html
网站维护教程更新时间:2012-03-21 02:25:31  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer