我读到,当回收站中的记录太多而无法从查询中排除已删除的记录时,可以使用条件“where isDeleted = false”。但在我的批次中,监控时间,查询比没有显式条件的查询慢得多。至少第一次运行,然后看起来更快。 然而,开发者控制台得到的结果总是令人兴奋。 谁能告诉我原因并帮助我!
您在哪里读过它?我看起来很可疑。
isDeleted = false
应该对所有正常查询(末尾没有 ALL ROWS
的查询)没有影响,因为这就是它们开箱即用的操作。如果有什么问题的话,它甚至可能会减慢执行速度,因为查询优化器需要考虑这个字段(它没有索引,对 99% 的时间都具有相同值的东西建立索引是没有用的)。
您可以在开发人员控制台中尝试查询优化器,并记住索引统计信息通常会在一夜之间重新计算,因此如果您加载了大量测试数据 - “今天”查询可能仍会使用旧统计信息。
您可能会过于复杂化,依赖于一次性结果,因为例如,在您开始实验时服务器的负载很低。或者,这可能只是未记录的行为,随着最近的版本之一而改变。只需选择/创建一个有意义的索引,您就会变得更好。
更多阅读材料:
排除回收站记录所节省的成本取决于查询的目标对象中的数据量。如果您正在处理大数据量,并且回收站中的目标对象有大量记录,则查询计划表明通过包含 WHERE IsDeleted = False 可以降低成本。
SELECT ID, Company FROM Lead WHERE IsDeleted = False
成本:0.91247
SELECT Id, Company FROM Lead
费用:1.39660
来自 Salesforce 文档...
Salesforce的数据删除机制可以对大数据量的性能产生深远的影响。 Salesforce 对用户删除的数据使用回收站比喻。 Salesforce 不会删除数据,而是将数据标记为已删除,并通过回收站使其可见。这个过程称为软删除。 虽然数据被软删除,但它仍然会影响数据库性能,因为数据仍然驻留,并且删除的记录必须从任何查询中排除。