关于mssql2000中临时表的性能问题的讨论

mssql2000的存储过程大部分用到临时表(许多计算比较复杂,不用不行),因为mssql2000的临时表是建在硬盘上的,导致速度十分慢,原来mssql65的临时表是可以tempdb in ram 建在内存的,速度比现在快上千上万倍,班长告诉我用表变量,用表变量的确可以加快一点速度,但表变量还是有一定限制,许多存储过程都无法用表变量,求教高手:有没有好的解决方案?

表变量的限制主要是不能用SELECT 。。。。 INTO TABLEVAR FROM 。。。

如果只能用tempdb,在数据量大的时候可以考虑在临时表加索引。
另外,tempdb 性能可以优化,以下从联机帮助拷贝:

优化 tempdb 性能
对 tempdb 数据库的物理位置和数据库选项设置的一般建议包括:

使 tempdb 数据库得以按需自动扩展。这确保在执行完成前不终止查询,该查询所生成的存储在 tempdb 数据库内的中间结果集比预期大得多。

将 tempdb 数据库文件的初始大小设置为合理的大小,以避免当需要更多空间时文件自动扩展。如果 tempdb 数据库扩展得过于频繁,性能会受不良影响。

将文件增长增量百分比设置为合理的大小,以避免 tempdb 数据库文件按太小的值增长。如果文件增长幅度与写入 tempdb 数据库的数据量相比太小,则 tempdb 数据库可能需要始终扩展,因而将妨害性能。

将 tempdb 数据库放在快速 I/O 子系统上以确保好的性能。在多个磁盘上条带化 tempdb 数据库以获得更好的性能。使用文件组将 tempdb 数据库放在除用户数据库所使用的磁盘之外的磁盘上。
---------------------------------------------------------------

把你的临时表写成自定义函数,不知道效果怎样。

---------------------------------------------------------------

导致速度慢的原因不仅仅是与TEMPDB有关,检查你的系统配置,保证留给SQL SERVER充足的内存(要求比较高),不要让别达到任务与SQL 争抢内存,另外用个人版要比企业版对系统的资源要求低一些.

Published At
Categories with 数据库类
comments powered by Disqus