【问题标题】:Creation of Index during data load在数据加载期间创建索引
【发布时间】:2020-10-27 20:22:14
【问题描述】:

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

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

使用的ETL工具:-BODS

【问题讨论】:

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

标签: sql indexing etl


【解决方案1】:

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

  1. 加快数据加载速度
  2. 加快查询速度

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

在加载数据的同时创建索引可能会减慢数据加载速度 - 不一定是因为对被索引的表有任何影响,而是因为索引使用数据库资源,因此这些资源不能用于数据加载活动。

在加载表时在表上创建索引不会加快数据加载速度,并且可能会减慢速度(参见上一段)。当在数据库上执行 SQL 时,数据库要做的第一件事就是生成执行计划,即根据表统计信息、可用索引等确定执行语句的最有效方式。一旦执行 SQL 语句(基于计划),然后它不会继续检查自执行开始以来索引是否已更改,如果现在有更有效的计划可用,则重新计算计划并重新执行语句。

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

【讨论】:

    猜你喜欢
    • 2017-12-02
    • 2019-03-16
    • 2022-01-10
    • 2020-10-09
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 2017-08-13
    相关资源
    最近更新 更多