Apex Speed Test —使用SOQL中的ID列表与sObject列表过滤记录

Apex速度测试实验:
该博客是Apex速度测试实验的一部分。
这些实验检查我们在编写代码时是否做错了什么? 写什么东西好,什么不好? 您的单行代码是否破坏了CPU限制?
无论发现什么,我都在做实验。 非常欢迎您在这里,如果您可以在这些实验中添加任何内容
#CodeShouldNotEatCPU #CPU科学家

我们的实验:
在本实验中,我们将在使用List 和List 过滤数据时检查不同的行为。

你会需要:
一台计算机,一个浏览器,一个Salesforce组织和10000个潜在客户记录。

开始吧:
我们已为该实验取得10000条领先记录。 我们正在查询这些记录,并使用不同的方式重新查询记录。

https://gist.github.com/TheVishnuKumar/6d3fc5c547773e34b46a38f01d1c3be6

实验1:
在此实验中,我们在一个列表中查询10000条记录。 此查询只有一个字段。 现在,我们在另一个查询中传递此列表。 基本上,我们在过滤条件中传递List 。

打开开发者控制台。 现在打开执行匿名窗口。 (此选项显示在“调试”菜单中。)
复制此代码ApexSpeedExperiment_2.runExperiment1(); 并从开发者控制台运行它。 我调用此方法5次,结果如下。

结果:平均花费的时间为162.2毫秒。

实验2:
在此实验中,我们在一个列表中查询10000条记录。 此查询只有一个字段。 我们正在收集新列表中记录的ID,然后在另一个查询中传递此列表。 基本上,我们在过滤条件中传递List 。

打开开发者控制台。 现在打开执行匿名窗口。 (此选项显示在“调试”菜单中。)
复制此代码ApexSpeedExperiment_2.runExperiment2(); 并从开发者控制台运行它。 我调用此方法5次,结果如下。

结果:平均花费的时间为146.6毫秒。

注意:使用Set(而不是列表)进行测试时。 平均花费的时间为151毫秒。

实验3:
在此实验中,我们在一个列表中查询10000条记录。 此查询有多个字段。 现在,我们在另一个查询中传递此列表。 基本上,我们在过滤条件中传递List 。

打开开发者控制台。 现在打开执行匿名窗口。 (此选项显示在“调试”菜单中。)
复制此代码ApexSpeedExperiment_2.runExperiment3(); 并从开发者控制台运行它。 我调用此方法5次,结果如下。

结果:平均花费的时间为171.2毫秒。

结论:
根据我们的实验,使用List 过滤记录比List 更快。 但是,仍然需要记住一些注意事项:

1.如果您使用唯一的ID进行查询,则sObject的传递列表会很好,因为for循环也消耗CPU限制。
2.如果您查询的字段超过5–6个,则传递的Id列表会很好。
3.两种方法在各自的地方都是好的。

特别说明:在其中一种代码中,该代码写在After Insert上,并且代码从Trigger.New(Trigger.New是sObject列表)中重新查询数据。 由于逻辑需要更多父字段的数据。 在“触发后”中,我们几乎获取了所有字段数据,这消耗了5200毫秒。

为了解决这个问题,我使用了for循环来获取记录的ID,然后将其用于过滤器查询中。 现在查询花费了100-120毫秒。 减少了5000毫秒(5秒)。 这是很高的优化。

选择方法,取决于您的代码结构和流程。 但我的建议是使用List 过滤记录是好的。

感谢您参加Apex速度测试实验 。 如果您有其他实验打算。 请告诉我。 我将进行实验,并在此处共享博客。

在这里查看其他Apex速度测试实验…