我使用的是SQL Server 2005.我有一个简单的日志记录表,我的Web应用程序使用它来跟踪用户活动和访问过的网址。 表格设计非常简单
ID(身份值),
LogDate(datetime),
活动(nvarchar(200)),
网址(nvarchar(1000))
我们主要在此表中插入。 偶尔,如果我们想调查特定用户在某个日期期间的活动,我们会针对此表执行一些查询。 该表当前具有标识列作为其主键。这也是它的聚集索引。
我想知道将聚簇索引更改为LogDate列是否更好。 LogDate列存储活动的日期/时间并且可以有重复项,但由于我们总是插入表中,因此新记录应始终位于表的末尾,因此SQL Server没有理由进行重新组织或者进行会影响插入性能的页面拆分。将LogDate列作为聚簇索引也应该有助于搜索性能。
如果我的推理是正确的,请告诉我。谢谢!
答案 0 :(得分:3)
是的,您的推理是正确的,前提是插入的速度远小于datetime
(3.33ms)
SQL Server 2008有一个新的数据类型DATETIME2
,具有更高的精度(100纳秒)。
如果您留出合理数量的可用空间(FILLFACTOR在80-90之间),并定期重建索引(每周一次),那么一切都应该很好。
答案 1 :(得分:3)
在选择聚类索引之前,我们需要设置优先级。更重要的是:加快不经常选择或最低限度地减慢频繁插入?如果插入更重要,请保留现有的聚类索引。
答案 2 :(得分:0)
我认为最好的选择是使用“数据库引擎优化向导”。 这将为您的案例选择最佳选择。 你只需要运行它足够长的时间来覆盖你的不同情况,以便它的分析最符合你的真实生活情况。
您可以在http://msdn.microsoft.com/en-us/library/ms189303%28SQL.90%29.aspx(对于SQL Server 2005)
找到更多信息