1、一个中间表用来保存计算的中间值(由于表格的字段不固定,所以不能使用临时表)
     查询时建立然后删除。请问这样频繁的建立、删除有没有问题?对性能有么有影响?2、数据表最多能有多少列?  (好像 是1024   列,说不准,求准确答案)
     如果列数逼近最大值,请问 在 insert  delete update select 时,对性能影响有多大?3、跨数据库(同在一台服务器上的多个数据库)的 
     select 、多表链接   、 insert   、delete
     在性能上有没有影响?如果有影响多大?    准备将一个数据库拆分成两个数据库 一个主库  一个辅库。程序连接主库然后跨数据库更新辅库数据。请问这样可行吗?

解决方案 »

  1.   

    1、由于表格的字段不固定,这个不能成为不能使用临时表的理由,临时表是可以的,字段变化时,就删了重建,而且本来临时就是这样用的,你不删数据库也会删,一定用途就是这样设定的,性能及影响微软已经考虑。2、
    每个非宽表的列数
    1,024
    每个宽表的列数
    30,000
    每个 SELECT 语句的列数
    4,096
    官方:http://technet.microsoft.com/zh-cn/library/ms143432(v=sql.110).aspx
    列数一多,数据再一多的话,别指望性能会很好~3、分库一般是为了提高性能的。而且跨库一般是为了查询,更新的操作,你都用程序连接了,为啥不直接连接那个库
    同一服务器,跨库查询不会有很大的性能问题。
      

  2.   

    to: ky_min1、由于表格的字段不固定,这个不能成为不能使用临时表的理由,临时表是可以的,字段变化时,就删了重建,而且本来临时就是这样用的,你不删数据库也会删,一定用途就是这样设定的,性能及影响微软已经考虑。老实说 我也想用 临时表啊 ,可是不会啊 这么说吧,请问怎么根据数据字典来生成临死表,然后对临时表 insert  和 select 
    我用实体表也是木有办法啊,我是用动态拼接生成创建数据表的语句来生成数据表的,临时表创建完了insert 就保错啊
      

  3.   

    to: ky_min3、分库一般是为了提高性能的。而且跨库一般是为了查询,更新的操作,你都用程序连接了,为啥不直接连接那个库
    同一服务器,跨库查询不会有很大的性能问题。其实使用程序来维护一条数据库连接很费资源,太多了程序反应变慢   啊啊我想问的是 
    数据库1中的表一   left join   数据库2中的表二
     数据库1中的存储过程   insert   数据库2中的表二这样对性能有没有太大影响
      

  4.   

    1、一个中间表用来保存计算的中间值(由于表格的字段不固定,所以不能使用临时表)
         查询时建立然后删除。请问这样频繁的建立、删除有没有问题?对性能有么有影响?
    在关系数据库管理系统里面,能频繁操作的应该是DML,而不是DDL,SQL Server每次分配空间需要检查一大堆系统页,然后进行一定程度的锁,再存入数据,操作完又要弄一堆事情,光日志方面已经不小。另外,表格字段不固定,不能用临时表,但是能用实体表?这个逻辑是不是有点问题?
    2、数据表最多能有多少列?  (好像 是1024   列,说不准,求准确答案)
         如果列数逼近最大值,请问 在 insert  delete update select 时,对性能影响有多大?
    截至到2012版本是1024列,表越宽,性能相对来说越差。当列很多的时候,可能需要进行垂直拆分。
    3、跨数据库(同在一台服务器上的多个数据库)的 
         select 、多表链接   、 insert   、delete
         在性能上有没有影响?如果有影响多大?
    性能不如单库好。绝大部分统计信息都是库级别的,而统计信息直接影响执行计划的产生。换句换来说性能不能保证。
        准备将一个数据库拆分成两个数据库 一个主库  一个辅库。程序连接主库然后跨数据库更新辅库数据。请问这样可行吗?
    不是不可行,但是要看具体情况,能不拆的就不拆。除非你有充分的理由,至于拆库,还有一些方案可用,但是相对而言费用和难度都较高。
      

  5.   

    EXEC生成的临时表,EXEC执行完就不见了~
    你可以考虑把操作语句也写在EXEC里面
      

  6.   

    请教 DBA_Huangzj怎么根据数据字典来生成临时表,然后对临时表 insert  和 select   中间表的列 可能在 300-500之间 ,是否在可接受范围? 因为涉及到以前的程序,所以业务逻辑处理这块,不是很想动 啊啊数据库中有一个表示存放摄像头抓取的照片,所以数据库增长得很快。我的想法师把这个表单独分离到一起数据库中
    程序读取照片时 进行跨库 left join至于为啥不把照片放到文件夹里 ,那是因为当初就是这么设计的 啊啊
      

  7.   

    维护数据库连接,会费少许资源,没有到达影响程序运行的级别~
    数量巨大时,一般会考虑分库,把旧数据不易更新的分库存放,不清楚你是什么情况的分库原因。
    你问的分库后的连接查询及新增,那自然没有单库快了,不过对分库这种情况,跨库连接却要比程序分读两个数据库的信息再拼凑要好很多,性能影响不能一概而论
    另外,把数据库及架构名写死在SQL里面了,不是什么好的设计。
      

  8.   


    这个也木有办法啊
    需要考核统计的项目达到 300-500种之多   以后还可能增加。需要按考核单位select单位1     项目1    项目2   项目3   ......  项目500
    单位2    项目1    项目2   项目3   .......  项目500
      

  9.   

    Tiger_Zhao 说的有道理  再考虑一下
      

  10.   

    .Net 的 DataTable 也有计算列。
    为了性能,应该改程序的时候就得改。
      

  11.   

    SQL Server can have as many as two billion tables per database and 1,024 columns per table. The number of rows and total size of the table are limited only by the available storage. The maximum number of bytes per row is 8,060. If you create tables with varchar, nvarchar, or varbinary columns in which the total defined width exceeds 8,060 bytes, the table is created, but a warning message appears. Trying to insert more than 8,060 bytes into such a row or to update a row so that its total row size exceeds 8,060 produces an error message and the statement fails数据库最多有20亿个表,每个表最多有1024个字段
    每条记录所有字段加起来最多不能超过8060字节