【问题标题】:SQL Server 2008 indexes - performance gain on queries vs. loss on INSERT/UPDATESQL Server 2008 索引 - 查询的性能提升与 INSERT/UPDATE 的损失
【发布时间】:2011-10-06 09:18:16
【问题描述】:

您如何确定通过索引列在SELECT 上获得的性能是否会超过同一表中INSERT 上的性能损失?当索引弊大于利时,表的大小是否存在“临界点”?

我在 SQL Server 2008 中有一个表,在任何给定时间都有 2-3 百万行。每次对表执行插入操作时,也会使用同一个表的两个列对同一个表进行查找。我正在尝试确定向查找中使用的两列添加索引是否有益。

【问题讨论】:

  • 有趣的选词,因为 Kimberly Tripp 的文章被称为“The Tipping Point”。它被认为是关于确定索引使用情况的权威读物。
  • @dcp:谢谢,我一直在寻找新的头像:)
  • 哇。确实有趣的单词选择!我肯定会读那篇文章。感谢您的链接。

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


【解决方案1】:

与其他所有与 SQL 相关的内容一样,视情况而定

  • 它们是什么类型的字段?瓦查尔?诠释?日期时间?
  • 表上还有其他索引吗?
  • 是否需要添加其他字段?
  • 什么是聚集索引?
  • 一个事务中插入/删除了多少行?

唯一真正了解的方法是对其进行基准测试。将索引放在适当的位置并进行频繁的监控,或运行跟踪。

【讨论】:

  • +1 用于基准测试 - 唯一真正了解另一个索引是否有帮助 - 或伤害的方法。没有办法通过公式来确定——只有一个水晶球会有所帮助(我的现在在商店里……)
【解决方案2】:

这取决于您的工作量和要求。有时数据加载一次并读取数百万次,但有时并非所有加载的数据都被读取。

有时读取或写入必须在特定时间内完成。

【讨论】:

    【解决方案3】:

    案例 1:如果表是静态的并且被大量查询(例如:购物车应用程序中的项目表),那么在适当的字段上建立索引是非常有益的。

    案例 2:如果表是高度动态的,并且每天没有进行大量查询(例如:用于审计目的的日志表),那么索引会减慢写入速度。

    如果以上两种情况是边界情况,那么建立索引或不建立索引取决于争用表最接近上述哪种情况。

    如果不让查询调优顾问来判断。祝你好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多