Unix 为什么我不应该使用查找优化?

Unix 为什么我不应该使用查找优化?,unix,optimization,find,Unix,Optimization,Find,我在手册和信息页面中阅读了find命令中有关优化级别的部分,我无法理解为什么我不应该使用最激进的优化级别 我找到的唯一相关的句子是(来自manfind版本4.4.2): 相反,随着时间的推移,可以在较低的优化水平上启用经证明可靠、稳健和有效的优化 findutils测试套件在每个优化级别运行find上的所有测试,并确保结果相同 如果我理解得很好,这是关于通过findutils证明find的正确行为,但是,这套测试服确保所有的优化级别都给出相同的结果。你错过了这句话: 基于成本的乐观主义者对任何给

我在手册和信息页面中阅读了
find
命令中有关优化级别的部分,我无法理解为什么我不应该使用最激进的优化级别

我找到的唯一相关的句子是(来自
manfind
版本
4.4.2
):

相反,随着时间的推移,可以在较低的优化水平上启用经证明可靠、稳健和有效的优化

findutils测试套件在每个优化级别运行find上的所有测试,并确保结果相同


如果我理解得很好,这是关于通过findutils证明
find
的正确行为,但是,这套测试服确保所有的优化级别都给出相同的结果。

你错过了这句话:

基于成本的乐观主义者对任何给定测试成功的可能性有一个固定的想法

这意味着,如果您的目录具有高度非典型的内容(例如,许多命名管道和很少的“常规”文件),那么优化器实际上可能会降低查询的性能(在这种情况下,假设
-type f
-type p
更可能成功,反之亦然)。在这种情况下,您最好立即对其进行优化,这只有在
-O1
-O2
时才可能实现

即使忽略这个问题,基于成本的优化器的固定成本也很难得到正确的结果。涉及到多个硬件和软件(硬盘、内核、文件系统),它们都各自进行缓存和优化。因此,很难预测不同操作的成本,即使是相对而言(例如,我们知道
readdir(2)
stat(2)
便宜,但我们不知道便宜多少)。这意味着基于成本的优化并不总是保证产生最佳的优化,即使假设典型的文件系统内容也是如此。较低的优化级别允许您通过尝试和错误手动调整查询,这可能更可靠,但也更费力