IT技术江湖   操作系统   安全技术   平面设计   Web开发   数据库   互联网   搜索引擎   网络广告   
引擎技术江湖  BLOG  合作联系
本站
Google
IT技术江湖
首页>数据库>SQL语言> T-SQL脚本:计算表的宽度
  • IT技术江湖
  • T-SQL脚本:计算表的宽度
    http://www.hack1st.com 来源: 2008-03-18 阅读: 评论

      问题

      我担心我们的数据库设计有点过于异常。我发现我们常常会有一些非常宽的表,虽然这样使我们编码工作更加方便,但是我很担心这样的异常会不会对数据读取和数据库的整体性能有所影响。在我修改这些表或者改变我们的团队以后的数据库设计方法之前,我想知道怎么才能知道,相对于理论上的最大宽度,这些表的实际宽度是多少?你可不可以提供一两个脚本,让我可以在我的SQL Server数据库里运行?还有没有什么数据库设计实例的资料可以提供?我知道数据库设计有一点异常现象是正常的,我只是不知道我的数据库设计是不是有点过于异常。

      回答

      说到计算表的宽度,倒是有一些不同的方法可供选择。先看看下面几种方法的脚本。至于数据库设计方面,我们再后文另外讨论。

      方法一: DBCC SHOWCONTIG

      DBCC SHOWCONTIG命令可以报告与行相关的信息,可以考虑使用它来计算表宽。这是通过使用WITH TABLERESULTS选项来完成。然后根据你的需要可以检查以下几项: MinimumRecordSize、 MaximumRecordSize和 AverageRecordSize。

      简单的 DBCC SHOWCONTIG 命令

    以下是引用片段:
      USEAdventureWorks;
      GO
      DBCCSHOWCONTIGWITHTABLERESULTS;
      GO

      要谨记的一点是,DBCC SHOWCONTIG的这个功能只在SQL Server 2000和SQL Server 2005里有。不建议繁忙的SQL Server数据库在工作时间运行这个命令,可以在非工作时间或着维护窗口或数据库备份里运行该命令。

      方法二:- sys.dm_db_index_physical_stats

      SQL Server 2005的一个新特性就是更加生动的管理视图和函数。在这种情况下我们可以方便使用的就是sys.dm_db_index_physical_stats。管理视图和函数最大的优点在于可以通过非常简单的SELECT语句进行查询。下面是几个使用AdventureWorks SQL Server 2005数据库的例子:

    以下是引用片段:
      sys.dm_db_index_physical_stats–基本的SELECT语句
      USEAdventureWorks;
      GO
      SELECTCAST(DB_NAME(DATABASE_ID)ASVARCHAR(20))AS'DatabaseName',
      CAST(OBJECT_NAME([OBJECT_ID])ASVARCHAR(20))AS'TableName',
      index_id,
      index_type_desc,
      alloc_unit_type_desc,
      min_record_size_in_bytes,
      max_record_size_in_bytes,
      avg_record_size_in_bytes
      FROMSYS.DM_DB_INDEX_PHYSICAL_STATS(DB_ID('AdventureWorks'),NULL,NULL,NULL,'DETAILED');
      GO
      sys.dm_db_index_physical_stats–带有ORDERBY从句的基本SELECT语句
      USEAdventureWorks;
      GO
      SELECTCAST(DB_NAME(DATABASE_ID)ASVARCHAR(20))AS'DatabaseName',
      CAST(OBJECT_NAME([OBJECT_ID])ASVARCHAR(20))AS'TableName',
      index_id,
      index_type_desc,
      alloc_unit_type_desc,
      min_record_size_in_bytes,
      max_record_size_in_bytes,
      avg_record_size_in_bytes
      FROMSYS.DM_DB_INDEX_PHYSICAL_STATS(DB_ID('AdventureWorks'),NULL,NULL,NULL,'DETAILED')
      ORDERBYavg_record_size_in_bytesDESC;
      GO
      DatabaseDesignConsiderations

      数据库设计需要考虑的问题:

      到底什么时候应该考虑评测你的数据库设计方案(宽的表),以下是几个方面:

      好或不好——考虑到表的使用,宽的表不一定是不好的设计方案。对于需要生成报表的工作环境,一些数据库会设计地比较宽,来满足报表需要,这样可以生成简单的界面。

      消除多表连接——在OLTP环境里,有些情况下会通过重复数据来消除多表连接。根据不同的情况以及重复数据的维护,这可能是保证良好的用户体验的一个重要技术。

      重复列——我觉得这种情况是很典型的标志,说明要么是数据库设计不够严谨,要么就是数据库已经开发了很长时间了。如果一个表有三列以上意思一样的列,比如产品一,产品二,产品三,那么可以说是一个很典型的一对多关系。另外需要考虑的一点是,如果订单里还有第四个产品或第五个产品,那怎么办呢?

      如果一个数据库包含一些很宽的表,所有的列都是文本数据类型,但是其中一些更适合使用integer符号整型数据或日期时间类型等等,那么这样的数据库肯定是没有考虑周密,或者设计团队根本还需要进一步加强数据库方面的学习。

    上一篇:用SQL语句修改表字段为主键  
    下一篇:SQL语法参考手册

    ·网友互动--用户名: (新注册) 密码: 匿名评论 [所有评论]
    评论内容:(用户发表意见仅代表其个人意见,评论内容与本站立场无关,请自觉遵守互联网相关政策法规)
    关注此文读者还看过
    • ·深入浅出SQL教程之SELECT语句的自连接
      ·用TSQL求子串在父串中出现的次数
      ·Sql语句密码验证安全漏洞
      ·深入浅出SQL系列教程之SQL语言简介
      ·SQL语句性能调整原则
      ·SQL中使用WITH AS提高性能
      ·SQL语法参考手册
      ·T-SQL脚本:计算表的宽度
      ·用SQL语句修改表字段为主键
      ·在其他的编程接口中应当如何使用游标
    最新更新
    • ·深入浅出SQL教程之SELECT语句的自连接
      ·用TSQL求子串在父串中出现的次数
      ·Sql语句密码验证安全漏洞
      ·深入浅出SQL系列教程之SQL语言简介
      ·SQL语句性能调整原则
      ·SQL中使用WITH AS提高性能
      ·SQL语法参考手册
      ·T-SQL脚本:计算表的宽度
      ·用SQL语句修改表字段为主键
      ·在其他的编程接口中应当如何使用游标
    文章关注度排行
    ·深入浅出SQL系列教程之SQL语言简介
    ·SQL语句性能调整原则
    ·Sql语句密码验证安全漏洞
    ·用SQL语句修改表字段为主键
    ·SQL语法参考手册
    ·用TSQL求子串在父串中出现的次数
    ·深入浅出SQL教程之SELECT语句的自连接
    ·SQL中使用WITH AS提高性能
    热点推荐
    SQL语法参考手册
    SQL语法参考手册
    频道推荐
    • ·用SQL语句修改表字段为主键
    • ·SQL语法参考手册
    • ·SQL中使用WITH AS提高性能
    本站精华
    SQL语法参考手册
    SQL语法参考
    • ·SQL中使用WITH AS提高性能
    • ·SQL语法参考手册
    • ·用SQL语句修改表字段为主键
    • | 网站导航 | 联系QQ | 编辑邮箱 | RSS订阅 | 友情链接 | 官方blog
    • 版权所有:IT技术江湖 @2007-2008
    • powered by www.hack1st.com online services. all rights reserved.京ICP备07005766号