表中创建索引的最佳行数

Posted

技术标签:

【中文标题】表中创建索引的最佳行数【英文标题】:Optimum number of rows in a table for creating indexes 【发布时间】:2016-10-31 15:52:09 【问题描述】:

我的理解是,在小表上创建索引可能成本大于收益。

例如,在少于 100 行(甚至 1000 行?)的表上创建索引是没有意义的

是否有任何特定的行数作为创建索引的阈值?

更新 1

我调查的越多,得到的信息就越多。我可能太担心保留 IO 写操作;因为我的 SQL 服务器数据库处于 HA 同步提交模式。

第 1 点:

这个问题非常关注 IO 写入性能。对于 SQL Server HA 同步提交模式等场景,当数据库服务器驻留在跨子网数据中心时,IO 写入的成本很高。添加索引会增加昂贵的 IO 写入成本。

第 2 点:

Books Online 建议:

索引小表可能不是最优的,因为它可以接受查询 优化器遍历索引搜索数据的时间比 执行简单的表扫描。因此,小表上的索引可能 从不使用,但仍必须作为表中的数据进行维护 变化。

我不确定向只有 1 个单行的表添加索引是否有任何好处 - 还是我错了?

【问题讨论】:

你为什么会有这种感觉?拥有id 列是能够连接两个表的好方法,即使表很小。这是一个唯一标识符。 不要猜测,使用查询分析器查看特定的查询 是否会从索引中受益。虽然,至少聚集索引可以使任何表访问速度更快,因为它对磁盘上的行进行排序。 建议索引可以帮助您的系统的最少行数。答案是 1。 再一次,这一切都取决于你要给那张桌子做什么。和往常一样,您需要对其进行测试 【参考方案1】:

你的理解是错误的。小表在与大表连接时也特别受益于索引。

索引的成本有两部分,插入/更新期间的存储空间和处理时间。第一个现在很便宜,所以几乎被丢弃了。因此,您只应考虑当您有一个包含大量更新和插入的表时应用正确的配置。

【讨论】:

感谢您的帮助。我虽然当一张表适合一页时,索引不会有太多好处。我想我错了。这是否意味着索引可以帮助只有一行(甚至 10 行)的表?如果是,那我就迷惑了!。 继续... 您能否向我推荐一篇文章,以提高我对小表上索引的好处的理解?我喜欢深入学习它。感谢您的帮助。 这里有一个类似的问题***.com/questions/252865/no-indexes-on-small-tables,考虑到并非所有情况都相同,因此测试始终是基本做法。还有一篇文章richardfoote.wordpress.com/2009/04/16/…

以上是关于表中创建索引的最佳行数的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 为一列创建多个非聚集索引与在一个索引中创建多个列

如何在 Spark Table 中创建索引?

在没有索引视图的情况下,在 SQL Server 中创建复杂视图的最佳方法是啥?

如何在Laravel中创建唯一索引?

SQL CREATE INDEX 语句:如何创建索引?

如何在 Informix 中创建 BTS 索引