数据库维护,大二进制表优化

时间:2010-05-20 16:46:53

标签: sql-server sql-server-2005

我有一个庞大的数据库,大小约为1 TB,大部分空间都是由存储图像的表所占用,表格现在几乎有800k行。

服务器响应时间增加了,我想知道我应该使用哪种技术,或者你推荐,分区? o如何重组表

每一行都是由image id列访问的,并且它有该列的聚集索引,并且我每两天重新组织一次索引,每7天我重建一次,但似乎没有工作

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

如果表由image_id聚类,并且您始终通过image_id访问,则表的大小无关紧要,碎片也是如此(无需重建)。

如果你看到性能下降,那么大多数都会有其他的东西在起作用。你正在进行范围扫描?查看sys.dm_db_index_usage_stats,user_scans列是否与0不同?这意味着您有查询进行扫描。

除非您测量 时间增加,否则您将在黑暗中拍摄空白并且永远无法正确解决问题。应用方法学方法,如Waits and Queues来识别问题。

我现在可以告诉你一件事:分区从不性能提升。它用于数据维护(切换/切换)以及在文件组上以受控方式传播负载。但是你永远不能指望分区到提高性能,你最多希望与非分区表具有相同的性能。

答案 1 :(得分:0)

如果响应时间在增加,那么您必须使用此表做更多事情,而不仅仅是为了ids提取图像?

您的图片表中还存储了哪些其他数据列?

如果你有一个id(可能是身份)的聚集索引,那很好,但添加一个可以覆盖搜索条件的附加非聚集索引可能会有所帮助。

假设您还有名称或标签或区域或此图像表中的任何列(并假设您不打算将此表垂直分区为单独的表),然后在标记上具有非聚集索引,ID INCLUDE(名称),说出或与您的使用模式相匹配的东西会有很大帮助。

记住:聚集索引不是索引,而是数据的组织方式。它通常对任何类型的搜索操作都没有多大帮助 - 它主要适用于身份查找,当您几乎每列读取数据时,以及按聚集索引的顺序传输数据。