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])
答案 0 :(得分:3)
拥有良好群集密钥实际上可以加速甚至是您的插入内容(阅读Kimberly Tripp的优秀博客文章The Clustered Index Debate Continues以获得详尽而全面的解释,为什么是这样)!从它的外观来看,你根本就没有聚类键。
所以我肯定会建议在id
列上添加主要/群集密钥 - 它非常适合用于良好的群集密钥:狭窄,静态,独特,不断增加:
CREATE UNIQUE CLUSTERED INDEX CIX_YourTableName
ON dbo.YourTableName(ID)
这应该加快一切 - 插入,更新,删除和选择。
是否需要额外的索引(以及要索引的列)取决于您的SELECT查询 - 因为您没有真正告诉我们任何有关这些的信息,我们只能猜到蓝色......
基本上,你需要做什么:
确定你是否需要一个索引,它是什么,以及它对你的场景有多大帮助(或者它会对INSERT性能有多大影响)真的没有神奇的公式 - 你需要在你的数据库上测量自己,你的硬件,你的环境。
答案 1 :(得分:1)
在写入表时添加索引成本。 (INSERT,UPDATE,DELETE操作)。它可以提高读取性能(SELECT,UPDATE,DELETE操作)。因此,如果您有更多读取而不是写入,那么是,索引可以帮助您。如果你阅读的内容少于你写的那么一个索引可以帮助你,因为你不必阅读那么多(一个索引基本上是表的一个小子集,如果你的选择只击中那个子集,那么你可以加快读取在某些情况下相当大)
我会添加索引并监视性能,如果它不适合您,则删除索引。最终,唯一可以确定的方法是尝试并比较结果。
答案 2 :(得分:1)
数据存在的时间并没有告诉您索引的必要性。但是更新与读取的比率确实如此。没有索引,插入是最快的。更新和删除可能不是,因为它们可能会在搜索要更改的记录时获得索引。选择也可以从索引中受益。
因此,即使对表有很多更新,通常也有更好的索引。一般例外是一个用于记录的表,除非有一次实际需要日志,否则通常只能写入。
但可以肯定的是,你最好在那里放一个索引并监控性能上升或提升。