繁忙的表,索引或不索引

时间:2011-05-29 11:34:28

标签: sql-server indexing sql-server-2008-r2

SQL Server,非常繁忙的表,可以随时为大约6-10K用户保存活动,并且每次点击都有插入/更新/删除。

我没有在此表上使用索引,因为任何写入的数据都不会超过10分钟。

但在观看活动监视器时,我注意到SQL Server建议在该表中添加索引。

我知道在表上保留索引有你认为我应该添加索引吗?

有关详细信息的更新 SQL 2008 R2

     [id] [bigint] IDENTITY(1,1) NOT NULL,
     [siteid] [int] NOT NULL,
     [last_seen] [datetime] NOT NULL,
     [ua] [varchar](250) NOT NULL,
     [ip] [varchar](15) NOT NULL,
     [t_id] [int] NOT NULL

建议的指数

ON [dbo].[onlines] ([ua],[ip],[t_id])

3 个答案:

答案 0 :(得分:3)

拥有良好群集密钥实际上可以加速甚至是您的插入内容(阅读Kimberly Tripp的优秀博客文章The Clustered Index Debate Continues以获得详尽而全面的解释,为什么是这样)!从它的外观来看,你根本就没有聚类键。

所以我肯定会建议在id列上添加主要/群集密钥 - 它非常适合用于良好的群集密钥:狭窄,静态,独特,不断增加:

CREATE UNIQUE CLUSTERED INDEX CIX_YourTableName
  ON dbo.YourTableName(ID)

这应该加快一切 - 插入,更新,删除和选择。

是否需要额外的索引(以及要索引的列)取决于您的SELECT查询 - 因为您没有真正告诉我们任何有关这些的信息,我们只能猜到蓝色......

基本上,你需要做什么:

  • 建立基线 - 衡量您的表现
  • 然后应用一个有意义的索引 - 包含在WHERE子句和/或ORDER BY表达式中使用的列
  • 再次测量并比较

确定你是否需要一个索引,它是什么,以及它对你的场景有多大帮助(或者它会对INSERT性能有多大影响)真的没有神奇的公式 - 你需要在你的数据库上测量自己,你的硬件,你的环境。

答案 1 :(得分:1)

在写入表时添加索引成本。 (INSERT,UPDATE,DELETE操作)。它可以提高读取性能(SELECT,UPDATE,DELETE操作)。因此,如果您有更多读取而不是写入,那么是,索引可以帮助您。如果你阅读的内容少于你写的那么一个索引可以帮助你,因为你不必阅读那么多(一个索引基本上是表的一个小子集,如果你的选择只击中那个子集,那么你可以加快读取在某些情况下相当大)

我会添加索引并监视性能,如果它不适合您,则删除索引。最终,唯一可以确定的方法是尝试并比较结果。

答案 2 :(得分:1)

数据存在的时间并没有告诉您索引的必要性。但是更新与读取的比率确实如此。没有索引,插入是最快的。更新和删除可能不是,因为它们可能会在搜索要更改的记录时获得索引。选择也可以从索引中受益。

因此,即使对表有很多更新,通常也有更好的索引。一般例外是一个用于记录的表,除非有一次实际需要日志,否则通常只能写入。

但可以肯定的是,你最好在那里放一个索引并监控性能上升或提升。