1

我正在接管一个带有失控表的数据库。它有 2011 年、2012 年、2013 年和未来的交易记录。

这张桌子对公司的运营至关重要。但随着 730k 条记录的增加,它越来越失控,并且随着每两周添加一次交易而增长。

我不希望更改表的现有结构,因为许多现有操作都依赖于它,到目前为止它有一个关于交易 ID 和交易日期的索引。但是查询表变得非常麻烦。

是否明智,甚至可以通过使用 left(date,4) 作为索引的一部分将它们索引到交易日期的年份?

编辑:该表未规范化(而且我看不到规范化的目的,因为每一行对于索赔号都是唯一的),并且每条记录有 168 个字段,其中包含 varchar(255) 的 5 个不同“备忘录”字段。

4

1 回答 1

0

其中一个选项是创建过滤索引- 这就像根据特定条件合并一组记录。

在您的情况下,您应该创建几个索引 - 每个都过滤特定年份的记录。例如:

CREATE NONCLUSTERED INDEX IndexFor2013Year
    ON MyTable.BillOfMaterials (SomeDate)
    WHERE SomeDate>"2013-01-01 00:00:00" and SomeDate<"2014-01-01 00:00:00";
GO

无论如何,为经常在 DML 操作(UPDATE/INSERT/DELETE)下的表创建许多索引甚至可能导致性能下降。

您应该执行一些测试并比较执行计划。

请注意,我只是举一个例子——根据你的查询到底是什么,你应该创建一个索引。有时,查看 SQL Management Studio (2012) 向我提出的查询的执行计划,究竟哪些索引可以带来更好的性能。

于 2013-02-19T19:44:21.333 回答