salesforce isdeleted=false 会减慢查询而不是改进查询

问题描述 投票:0回答:2

我读到,当回收站中的记录太多而无法从查询中排除已删除的记录时,可以使用条件“where isDeleted = false”。但在我的批次中,监控时间,查询比没有显式条件的查询慢得多。至少第一次运行,然后看起来更快。 然而,开发者控制台得到的结果总是令人兴奋。 谁能告诉我原因并帮助我!

salesforce apex
2个回答
0
投票

您在哪里读过它?我看起来很可疑。

isDeleted = false
应该对所有正常查询(末尾没有
ALL ROWS
的查询)没有影响,因为这就是它们开箱即用的操作。如果有什么问题的话,它甚至可能会减慢执行速度,因为查询优化器需要考虑这个字段(它没有索引,对 99% 的时间都具有相同值的东西建立索引是没有用的)。

您可以在开发人员控制台中尝试查询优化器,并记住索引统计信息通常会在一夜之间重新计算,因此如果您加载了大量测试数据 - “今天”查询可能仍会使用旧统计信息。

您可能会过于复杂化,依赖于一次性结果,因为例如,在您开始实验时服务器的负载很低。或者,这可能只是未记录的行为,随着最近的版本之一而改变。只需选择/创建一个有意义的索引,您就会变得更好。

更多阅读材料:


0
投票

排除回收站记录所节省的成本取决于查询的目标对象中的数据量。如果您正在处理大数据量,并且回收站中的目标对象有大量记录,则查询计划表明通过包含 WHERE IsDeleted = False 可以降低成本。

SELECT ID, Company FROM Lead WHERE IsDeleted = False

成本:0.91247

SELECT Id, Company FROM Lead

费用:1.39660

来自 Salesforce 文档...

https://developer.salesforce.com/docs/atlas.en-us.salesforce_large_data_volumes_bp.meta/salesforce_large_data_volumes_bp/ldv_deployments_techniques_deleting_data.htm

Salesforce的数据删除机制可以对大数据量的性能产生深远的影响。 Salesforce 对用户删除的数据使用回收站比喻。 Salesforce 不会删除数据,而是将数据标记为已删除,并通过回收站使其可见。这个过程称为软删除。 虽然数据被软删除,但它仍然会影响数据库性能,因为数据仍然驻留,并且删除的记录必须从任何查询中排除。

© www.soinside.com 2019 - 2024. All rights reserved.