Sql 在数据加载期间创建索引

Sql 在数据加载期间创建索引,sql,indexing,etl,Sql,Indexing,Etl,我们可以在从表中读取数据时在表上创建索引吗?实际上,我正在使用ETL工具将数据加载到目标。性能非常慢,我不希望数据加载停止 如果在数据加载过程中创建索引,性能是否会提高 使用的ETL工具:-BODS在分析数据库中,索引基本上有两个用例: 加速数据加载 加快查询速度 表上的索引越多,加载速度就越慢。因此,传统上,“查询”索引在每次数据加载开始时删除,加载完成后重新构建。在可能的情况下,这仍然是一种很好的做法,但很明显,如果您有大量的表(因此索引重建时间过长),用户在数据加载或连续/流式加载期间运行

我们可以在从表中读取数据时在表上创建索引吗?实际上,我正在使用ETL工具将数据加载到目标。性能非常慢,我不希望数据加载停止

如果在数据加载过程中创建索引,性能是否会提高


使用的ETL工具:-BODS

在分析数据库中,索引基本上有两个用例:

  • 加速数据加载
  • 加快查询速度
  • 表上的索引越多,加载速度就越慢。因此,传统上,“查询”索引在每次数据加载开始时删除,加载完成后重新构建。在可能的情况下,这仍然是一种很好的做法,但很明显,如果您有大量的表(因此索引重建时间过长),用户在数据加载或连续/流式加载期间运行查询,那么这是不可能的

    在加载数据时创建索引可能会降低数据加载速度—这不一定是因为对被索引的表有任何影响,而是因为索引使用了DB资源,因此这些资源不可供数据加载活动使用

    在加载表时在该表上创建索引不会加快数据加载速度,而且可能会降低数据加载速度(请参见上一段)。在DB上执行SQL时,DB首先要做的事情之一是生成执行计划,即根据表统计信息、可用索引等确定执行语句的最有效方式。一旦SQL语句执行完毕(基于计划),然后,它不会连续检查索引自执行开始以来是否已更改,如果现在有更有效的计划可用,则重新计算计划并重新执行语句


    希望这有帮助?如果有,请勾选此答案

    您的DBMS是什么,以及您对索引的期望是什么?一般来说,从表中读取数据时不应该出现任何索引创建问题,因为读取数据不会生成额外的数据或对数据的重锁。性能如何:为什么您希望通过索引来提高性能?您没有提供任何模型信息和代码瓶颈,那么一旦创建索引,它会提高性能吗@astentxRandom索引创建可能会对性能产生任何影响:没有人能猜到,它可能会降低或提高性能。如果它总是提高性能,DBMS开发人员会编写代码,以便在默认情况下始终创建它,但事实并非如此。