如何确定通过索引同一表中的列而在SELECT
上获得的性能是否会超过在INSERT
上的性能损失?当索引弊大于利时,表的大小是否存在一个"临界点"?
我有一个表在SQL Server 2008与2-3百万行在任何给定的时间。每次在表上执行插入操作时,也会使用同一表的两个列对其进行查找。我正在尝试确定为查找中使用的两列添加索引是否有益。
和其他sql相关的东西一样,这取决于:
- 它们是什么样的字段?Varchar吗?Int ?Datetime吗?
- 表上还有其他索引吗?
- 是否需要包含额外的字段?
- 聚类指数是什么?
- 一个事务中插入/删除了多少行?
这取决于您的工作负载和需求。有时数据加载一次,读取数百万次,但有时并非所有加载的数据都被读取。
有时读或写必须在一定时间内完成。
情况1:如果表是静态的,并且被大量查询(例如:购物车应用程序中的item表),那么在适当的字段上建立索引是非常有益的。
情况2:如果表是高度动态的,并且每天没有很多查询(例如:用于审计目的的日志表),那么索引将减慢写速度。
如果以上两种情况是边界情况,则在表上建立索引或不建立索引取决于争用表最接近哪一种情况。
如果没有,留给查询优化顾问判断。好运。