表中创建索引的最佳行数
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 为一列创建多个非聚集索引与在一个索引中创建多个列