具有大表的SQL Server性能

lan*_*der 1 database sql-server database-design sql-server-2005

我正在寻找一些关于sql表结构的建议.

基本上我会有一个包含大约30列字符串,整数和小数的表.服务将每天写入该表约500次.表中的每条记录可以是"非活动"或"活动".此表将不断增长,并且在任何时候都会有大约100个"活动"记录需要返回.

虽然表很小,但返回"活动"记录的性能仍然很敏感.当表格大得多或甚至更晚,当表格中有数百万条记录时,我的关注时间是12-18个月.

为性能视图维护两个表一个用于"活动"记录和一个用于"非活动"记录,还是在活动列上创建索引以解决任何潜在的性能问题?

Jon*_*nna 5

拥有一个小的"活动"表肯定会更有效率.最明显的代价是正确维护记录比使用一个表更麻烦.我可能不会立即这样做,但请记住它作为潜在的优化.

活动列的索引将大大改善问题.更重要的是,多列索引(或索引)是否适合最常使用的查询(或查询).例如,如果您经常要求在特定日期之后创建活动行,则可以使用date和active上的索引来获取单个索引.同样,如果您希望按ID排序所有活动行,则可以使用id和active两者.

使用数据库引擎进行测试调优顾问在这里可以提供非常丰富的信息,但不如预测在未来几个月内您期望更改的数据的最佳方法 - 就像您在此处一样.

索引视图可能是您最好的方法,因为您可以创建最接近SQLServer 2005中可用的部分索引(您的标记建议您使用的索引).请参阅http://technet.microsoft.com/en-us/library/cc917715.aspx#XSLTsection124121120120这将根据您的常规搜索/加入/订单条件创建索引,但仅限于相关行(完全忽略其他行) .

更好的是,如果你可以使用SQLServer 2008,那么使用过滤索引(微软决定调用部分索引).有关它们的更多信息,请参见http://technet.microsoft.com/en-us/library/cc280372.aspx.

如果你用2008而不是2005标记我肯定会建议过滤索引,因为我可能会选择索引视图,但可能会选择多列索引.