Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将多个索引一个接一个地应用于表还是使用多个单独的查询更快_Sql_Performance_Sql Server 2008_Indexing - Fatal编程技术网

Sql 将多个索引一个接一个地应用于表还是使用多个单独的查询更快

Sql 将多个索引一个接一个地应用于表还是使用多个单独的查询更快,sql,performance,sql-server-2008,indexing,Sql,Performance,Sql Server 2008,Indexing,这与多列索引(复合索引)和单列索引无关。这与其说是功能,不如说是性能 我有一个场景,需要对同一个表应用多个索引。现在我让它检查它们是否存在,然后一个接一个地应用它们 我的问题是,从一开始到结束,应用它们的总时间要超过几个小时。我希望尽可能减少总时间(缩短应用时间窗口) 接二连三 index1=>index2=index3=>…indexN 所有这些都同时应用于一个表 index1 index2 index3 ... indexN 有些表的索引计数为10+,有多个表,这将应用于多个数据库(

这与多列索引(复合索引)和单列索引无关。这与其说是功能,不如说是性能

我有一个场景,需要对同一个表应用多个索引。现在我让它检查它们是否存在,然后一个接一个地应用它们

我的问题是,从一开始到结束,应用它们的总时间要超过几个小时。我希望尽可能减少总时间(缩短应用时间窗口)

接二连三

index1=>index2=index3=>…indexN

所有这些都同时应用于一个表

index1 
index2 
index3 
...
indexN

有些表的索引计数为10+,有多个表,这将应用于多个数据库(几百个)。对于SAN magic类型的东西,我无法控制数据存储或SQL Server。我有16个处理器和一个企业服务器,但所有数据库中的所有表的总数是非常重要的。考虑到近3000个表中的多个GB行表计数和多TB存储大小。这些都是聚集索引,大多数是复合的

,而实现这一点的简单方法似乎并不存在,如果通过对一个相当大的表进行测试发现,10个新索引的应用程序同时处理独立的查询和配置(几乎同时分别启动)确实比单个脚本快,其中索引以一种连续的方式应用了很大的幅度。如果SQL Server有足够的资源来处理这种影响,那么这似乎也不会产生任何可以检测到的负面影响

只需在此处更新范围和比例,而不需要太具体:

  • 针对多个表进行测试,其规模从微不足道(3.6M行)到更大
  • 针对30多个索引集(200M-500M行)进行测试
  • 针对具有1.6B到1.9B行的表进行测试
  • 根据表格的不同,索引计数在3-30+之间变化
  • tempdb大小为1TB
  • 2800多个表中的总范围从0行到近2B行
  • 服务器基本上已加载到它可以处理的最大点,并使用自动化保持在那里
实际结果示例一致,9到14小时的完成时间减少到43分钟以下,所有索引同时应用于一个数据库中的单个表和多个表以及200多个独立数据库中的索引。多TB级别的数据大小


我使用Powershell提交了索引添加,在不同的表上同时运行了数百个索引,包括在多个表上运行了30多个索引。

而实现这一点的简单方法似乎并不存在,通过对一个相当大的表进行测试发现,10个新索引的应用程序同时处理不同的查询和配置(所有索引几乎同时启动,分别启动)确实比单个脚本快,其中索引以一种连续的方式应用了很大的幅度。如果SQL Server有足够的资源来处理这种影响,那么这似乎也不会产生任何可以检测到的负面影响

只需在此处更新范围和比例,而不需要太具体:

  • 针对多个表进行测试,其规模从微不足道(3.6M行)到更大
  • 针对30多个索引集(200M-500M行)进行测试
  • 针对具有1.6B到1.9B行的表进行测试
  • 根据表格的不同,索引计数在3-30+之间变化
  • tempdb大小为1TB
  • 2800多个表中的总范围从0行到近2B行
  • 服务器基本上已加载到它可以处理的最大点,并使用自动化保持在那里
实际结果示例一致,9到14小时的完成时间减少到43分钟以下,所有索引同时应用于一个数据库中的单个表和多个表以及200多个独立数据库中的索引。多TB级别的数据大小


我使用Powershell提交了添加的索引,在不同的表上同时运行了数百个,包括在多个表上运行了30多个。

更新sql server版本并移动到列存储索引feature@ZaynulAbadinTuhin没有选择,这是另一天的任务,后面还有大量的工作要做。您想每晚重建这些索引还是一次性操作?@M.Kanarkowski这是一次性的,但工作量相当大。请更新sql server版本并移至列存储索引feature@ZaynulAbadinTuhin没有选择,这是另一天的任务,后面还有大量的工作。你想每晚重建这些索引还是一次性的行动?@M.Kanarkowski这是一次性的,但工作量相当大。