超大表效果性能

时间:2014-09-15 18:41:26

标签: sql sql-server sql-server-2008

我继承了一个数据库(我们都不喜欢那个),而且一张桌子已经失控了。

数据库超过50 GB。 我对它进行了碎片整理以及重新索引,但这没有帮助。 问题是该表有236列和大约23000行。 不,这不是一个错字!

我能看到的唯一解决方案是打破桌面。 .Net应用程序在我们的Intranet上,我已经优化了它包含的每一段代码以及存储过程。

该表包含TempHigh,TempLow和TempMed等信息。其他因素包括High,Low和Med在整个表格中的重复。因此,每个High,Low和Med都将成为自己的表,外键指向父表。

这将在访问数据和更新时创建大量JOIN。

这是我能看到的唯一可以解决问题的方法。

我的问题是,我是否忽略了解决此问题的更好方法?

欢迎提出任何建议。

感谢!!!

修改

为了澄清,我在数据库上运行了一个碎片整理以及重新索引。 我已经在Web和数据库服务器上打开了性能监视器。

感谢您的评论。我会尽力回答你的问题。首先,我已将数据库复制到我的.Net开发环境中,即使只是登录,它也很慢。并将.Net应用程序移动到与sql server相同的服务器上以测试连接问题。同样的问题。这是一个事务系统(OLTP)。有些列我已经移动到他们自己的表中,因为他们正在重复自己,并在他们的位置使用外键(没有约束)的新列。没有图像,只有数据。

以下是该表的规格:

TableName   SchemaName  RowCounts   TotalSpaceKB    UsedSpaceKB UnusedSpaceKB
MyTable         dbo       22904       45192            45160        32

1 个答案:

答案 0 :(得分:3)

  我是否忽略了解决此问题的更好方法?

是的:

  • 分析您的应用程序(源代码,而不是SQL)以确保数据库访问是最慢的部分
  • 运行SQL跟踪以识别性能最差的查询,并使用优秀的DBA来识别可能的优化
  • 确保所有统计信息都是最新的(至少每天一次)。
  • 不要猜测 - 使用硬性事实来识别性能瓶颈
  • 确保您拥有最常见查询的相应索引。
  • 不要以为破桌会加快速度。如果您经常连接多个1:1的表,它实际上可以使事情更慢

我见过大小 terabytes 的数据库仍然表现良好(每天添加/上传数千条记录)。关键是确定最慢的操作并添加/更新索引以优化这些操作。