1、@也是在tempdb里面的。
2、@这类表在定义的时候就 要建约束,否则后面不能想临时表那样建索引加快速度。
3、@的统计信息只有0或者1,临时表的统计信息和实体表一样
4、@通常建议在小于100行数据时用,#、##这类可以处理大数据量

解决方案 »

  1.   


    因为我发现在用#的临时表的时候,在写临时表时,硬盘在不断的读取,tempdb不断的增大,当写完临时表的时候,才用到cpu的计算,我统计了一下,在读写#临时表的时候,需要4、5分钟,在cpu计算的时候,才不到4、5秒的时间,我的意思是,如何加快tempdb的读取时间?有没有什么办法加快?
      

  2.   

    1、tempdb的初始大小要扩大一点,避免频繁增大。
    2、tempdb的“数据文件”可以拆成4个,放到不同的物理磁盘
    3、tempdb所在的磁盘如果IO没问题的话,频繁读写也不会成为瓶颈。
    4、如果你对大数据量使用@,我就试过,速度极其慢
      

  3.   


    因为我发现在用#的临时表的时候,在写临时表时,硬盘在不断的读取,tempdb不断的增大,当写完临时表的时候,才用到cpu的计算,我统计了一下,在读写#临时表的时候,需要4、5分钟,在cpu计算的时候,才不到4、5秒的时间,我的意思是,如何加快tempdb的读取时间?有没有什么办法加快?你可以考虑给#临时表建索引,来加快访问的速度
      

  4.   

    临时表建立是要创建索引的,给你一个创建临时表的范本吧,我有的比较复杂的存储过程,有4,5个临时表,存储过程的执行速度也很快,此外临时表用完了,在最后要DROP掉。IF object_id('tempdb..#tempTB1') is not null
    BEGIN
    drop table #tempTB1
    END
    CREATE table #tempTB1
    (
    stat_day varchar(10)
    )
        CREATE clustered index tempTB1_Index1 on #tempTB1 (stat_day)
      

  5.   

    表变量同临时表的区别和用法
    http://blog.csdn.net/roy_88/article/details/8461942
      

  6.   

    #临时表应用较为广泛,但必须做到合理使用,才不会出现阻塞等现象,
    主要方法是配置快速的TEMPDB硬盘,对临时表建立合理索引,及时释放
     
    而小数据量可直接上内存表变量@table,使用临活,通常不会出现阻塞问题