将多个索引一个接一个地应用于 table 还是使用多个单独的查询会更快
Is it faster to apply multiple indexes to a table one after the other or with multiple individual queries
这与多列索引(复合)与单列索引无关。这是关于性能而不是功能。
我有一个场景,我需要将多个索引应用到同一个 table。现在我让它检查它们是否存在,然后一个接一个地应用它们。
我的问题是,从开始到结束的总时间,应用它们需要几个小时以上。我想尽可能地减少总时间(减少应用它们的时间 window)
一个接着一个
index1 => index2 = index3 =>...indexN
全部同时应用于 table
index1
index2
index3
...
indexN
一些table的索引数是10+,有多个table,这将应用于多个数据库(几百个)我没有任何控制权这里的数据存储或 SQL 服务器用于 SAN 魔术类型的东西。我有 16 个处理器和一个企业服务器,但所有数据库中所有 table 的总数是非常重要的。考虑在将近 3000 table 秒内所有这些的多 GB 行数 table 计数和多 TB 存储大小。这些都是聚集索引,大多数是复合索引
虽然似乎不存在实现此目的的简单方法,但如果通过针对相当大的 table 的测试发现,则应用 10 个具有单独查询和配置的新索引 同时处理(几乎同时开始,分别)确实比单个脚本快,后者以串行方式应用索引,速度快得多。如果 SQL 服务器有足够的资源来处理影响,这似乎也没有可以检测到的负面影响。
这里只是为了更新范围和比例而不是太具体:
- 针对多个 table 进行了测试,规模从微不足道(360 万行)到更大
- 针对具有 30 多个索引(200M-500M 行)的集合进行测试
- 针对 tables 进行了 1.6B 到 1.9B 行的测试
- 索引计数在 3-30+ 之间变化,具体取决于 table
- tempdb 大小为 1TB
- 从 0 行到近 2B 行的总范围在 2800+ tables
- 服务器基本上加载到它可以处理的最大点并使用自动化保持在那里
实际结果示例与 9 到 14 小时的完成时间一致,减少到不到 43 分钟,同时在单个 table 和多个 table 索引上应用所有索引在一个数据库以及 200 多个独立的数据库中。多 TB 级别的数据大小。
我使用 Powershell 在不同的 table 上一次提交了数百个 运行 的索引添加,其中包括在多个 table 上的 30 多个。
这与多列索引(复合)与单列索引无关。这是关于性能而不是功能。
我有一个场景,我需要将多个索引应用到同一个 table。现在我让它检查它们是否存在,然后一个接一个地应用它们。
我的问题是,从开始到结束的总时间,应用它们需要几个小时以上。我想尽可能地减少总时间(减少应用它们的时间 window)
一个接着一个
index1 => index2 = index3 =>...indexN
全部同时应用于 table
index1
index2
index3
...
indexN
一些table的索引数是10+,有多个table,这将应用于多个数据库(几百个)我没有任何控制权这里的数据存储或 SQL 服务器用于 SAN 魔术类型的东西。我有 16 个处理器和一个企业服务器,但所有数据库中所有 table 的总数是非常重要的。考虑在将近 3000 table 秒内所有这些的多 GB 行数 table 计数和多 TB 存储大小。这些都是聚集索引,大多数是复合索引
虽然似乎不存在实现此目的的简单方法,但如果通过针对相当大的 table 的测试发现,则应用 10 个具有单独查询和配置的新索引 同时处理(几乎同时开始,分别)确实比单个脚本快,后者以串行方式应用索引,速度快得多。如果 SQL 服务器有足够的资源来处理影响,这似乎也没有可以检测到的负面影响。
这里只是为了更新范围和比例而不是太具体:
- 针对多个 table 进行了测试,规模从微不足道(360 万行)到更大
- 针对具有 30 多个索引(200M-500M 行)的集合进行测试
- 针对 tables 进行了 1.6B 到 1.9B 行的测试
- 索引计数在 3-30+ 之间变化,具体取决于 table
- tempdb 大小为 1TB
- 从 0 行到近 2B 行的总范围在 2800+ tables
- 服务器基本上加载到它可以处理的最大点并使用自动化保持在那里
实际结果示例与 9 到 14 小时的完成时间一致,减少到不到 43 分钟,同时在单个 table 和多个 table 索引上应用所有索引在一个数据库以及 200 多个独立的数据库中。多 TB 级别的数据大小。
我使用 Powershell 在不同的 table 上一次提交了数百个 运行 的索引添加,其中包括在多个 table 上的 30 多个。