【发布时间】:2015-02-24 10:40:51
【问题描述】:
我继承了一个 SQL 2005 数据库,其中一个表在大约 15 年的时间里增长到大约 1700 万条记录,现在速度非常慢。
表格布局大概是这样的:
id_column = nvarchar(20),indexed, not unique
column2 = nvarchar(20), indexed, not unique
column3 = nvarchar(10), indexed, not unique
column4 = nvarchar(10), indexed, not unique
column5 = numeric(8,0), indexed, not unique
column6 = numeric(8,0), indexed, not unique
column7 = nvarchar(20), indexed, not unique
column8 = nvarchar(10), indexed, not unique
(还有大约 5 列看起来几乎相同,但未编入索引)
“id”字段是最终用户在前端应用程序中输入的值。
没有定义的主键,也没有可以组合成唯一行的列(除非所有列都组合在一起)。该表实际上是另一个表的“详细信息”表,但没有确保参照完整性的约束。
每一列都在查询中的“where”子句中大量使用,这就是为什么我假设每个列都有一个索引,或者可能是另一个 DBA 拼命尝试加快速度。
说了这么多,我的问题是:在这一点上添加聚集索引对我有什么好处吗?
如果我确实添加了一个聚集索引,我认为它必须是一个新列,即一个标识列?基本上,这值得麻烦吗?
感谢任何建议。
【问题讨论】:
-
您是否有关于执行了哪些查询的统计信息,即哪些列最重要?我很想减少索引的数量,并在保留的那些上使用包含的列来定位最常见的行鉴别器。
标签: sql-server database performance indexing