【问题标题】:Filtering data based on timestamp in SQL Server在 SQL Server 中根据时间戳过滤数据
【发布时间】:2018-03-23 14:05:59
【问题描述】:

我开发了一个 informatica 流程,它基本上会从 SQL Server 读取一个非常大的表(比如大约 120-3 亿条记录)并将其加载到另一个数据库中。 过滤条件是 datetime2 字段(记录插入表的时间)。

在阅读之前和之后,我将在这个时间戳字段上创建和删除一个非聚集索引。由于时间不够,我实际上无法进行性能测试。

您认为在非聚集索引到位后,基于时间戳字段进行过滤就可以了吗?我的意思是关于性能如何的一个非常粗略的想法?我不希望性能受到太大影响!

【问题讨论】:

  • 这是任何人的猜测。也许创建索引实际上比导入数据需要更多时间。当您第一次尝试导入时,您的第一次性能测试应该会出现,不是吗?
  • "由于时间紧迫,我实际上无法进行性能测试。"您只需在生产环境中进行性能测试。
  • 好吧,实际上我们在测试环境中没有那么多数据,所以我可以只运行一些导入,但不能在实际体积上运行。我想我将不得不运行一个测试,看看它是如何工作的。

标签: sql-server informatica-powercenter


【解决方案1】:

创建 NCI 意味着读取整个表。因此,如果您每次需要运行此查询时都创建它,您的情况会更糟。您将多久使用一次 informatica 流程?如果频率意味着索引值得,则将索引设为永久。

【讨论】:

  • 流程实际上是一个临时流程,它主要会在每年一次的地方使用,因此很少使用。而且,我不能永久保留它,因为该表每天都是增量加载(插入和更新)的。由于加载频率非常少,而且由于表会不断更新,我决定创建和删除索引。
  • 然后忘记索引,它对你没有帮助
  • 但是补充一下,当这个流将被使用时(即使它一年一次),在那个特定的时间点,这个表上的数据更新将被停止。那么,由于更新已停止,该索引是否无济于事?
  • 问题是,建立索引的时间与读取整个表的时间一样长。所以建立一个索引,运行你的工作,然后删除索引会更糟,总的来说,然后根本不建立索引
  • 好的,非常感谢您的帮助。在采取这一步之前,我肯定需要做一些性能测试。
【解决方案2】:

只是想补充一下,记录数是 1 亿。在时间戳字段上创建索引只需 2.5 分钟!!!

我现在正在尝试根据时间戳加载记录,比如最近 4-5 天加载的记录,这对我来说确实是一个非常好的解决方案,它可以按预期工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    • 2023-02-13
    相关资源
    最近更新 更多