【问题标题】:Need advice on selecting a clustered index for a logging table需要有关为日志记录表选择聚集索引的建议
【发布时间】:2009-07-11 08:13:23
【问题描述】:

我使用 SQL Server 2005。我有一个简单的日志记录表,我的 Web 应用程序使用它来跟踪用户活动和访问的 URL。 桌子设计很简单

ID(身份值),

LogDate(日期时间),

活动 (nvarchar(200)),

网址 (nvarchar(1000))

我们主要对这张表进行插入操作。 有时,如果我们想调查特定用户在某个日期期间的活动,我们会对该表执行一些查询。 该表当前有一个标识列作为其主键。这也是它的聚集索引。

我想知道将其聚集索引更改为 LogDate 列是否更好。 LogDate 列存储活动的日期/时间并且可以有重复,但是由于我们总是插入到表中,新记录应该总是在表的末尾,所以 SQL Server 没有理由必须重新组织或进行会影响插入性能的页面拆分。将 LogDate 列作为聚集索引也应该有助于提高搜索性能。

如果我的推理正确,请告诉我。谢谢!

【问题讨论】:

    标签: sql-server indexing


    【解决方案1】:

    是的,您的推理是正确的,前提是插入率远低于datetime (3.33ms) 的粒度

    SQL Server 2008 有一个新的数据类型DATETIME2,具有更高的精度(100 纳秒)。

    如果您留出合理数量的可用空间(FILLFACTOR 介于 80 到 90 之间),并定期(每周一次)重建索引,一切都会好起来的。

    【讨论】:

      【解决方案2】:

      在选择聚簇索引之前,我们需要设置优先级。更重要的是:加速不频繁的选择还是尽量减慢频繁的插入?如果您的插入更重要,请保留现有的聚簇索引。

      【讨论】:

      • 感谢您的建议。这也是我应该考虑的事情。那么,您的意思是,如果我将 ID 保留为聚集索引,与将聚集索引设置为 LogDate 相比,插入性能会稍好一些?
      • @janemoreno。是的,因为插入具有重复 LogDate 的行将需要唯一性(如果它在 LogDate 上集群),它会有点慢。
      【解决方案3】:

      我认为最好的选择是使用“数据库引擎优化向导”。 这将负责为您的案例选择最佳选择。 您只需要运行足够长的时间来涵盖您的不同案例,以便其分析最符合您的实际案例。

      您可以在http://msdn.microsoft.com/en-us/library/ms189303%28SQL.90%29.aspx 找到更多信息(适用于 SQL Server 2005)

      【讨论】:

      • DTA 做得很合理,但它偶尔会提示“错误”的索引。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多