我在手册和信息页面中阅读了find
命令中有关优化级别的部分,我无法理解为什么不使用最积极的优化级别。
我找到的唯一相关句子是(来自man find
版本4.4.2
):
相反,随着时间的推移,可以在较低的优化级别上实现可靠,稳健和有效的优化。
findutils测试套件在每个优化级别运行find的所有测试,并确保结果相同。
如果我理解得很好,那就是通过findutils证明find
的正确行为,但是,这个测试套装确保所有的otimization级别都给出相同的结果。
答案 0 :(得分:2)
你错过了这句话:
基于成本的优化工具可以确定任何特定测试成功的可能性。
这意味着如果你有一个具有高度非典型内容的目录(例如很多命名管道和极少数"普通"文件),优化器实际上可能恶化的性能您的查询(在这种情况下,当反向为真时,假设-type f
比-type p
更有可能成功)。在这种情况下,您最好不要手动优化它,这只能在-O1
或-O2
实现。
即使忽略了这个问题,基于成本的优化器的固定成本也难以实现。涉及多个硬件和软件(硬盘,内核,文件系统),它们都进行了一些缓存和优化。因此,很难预测不同的操作会有多么昂贵,甚至相对于彼此(例如我们知道readdir(2)
比stat(2)
便宜,但我们不知道便宜多少)。这意味着即使假设典型的文件系统内容,也不能始终保证基于成本的优化能够产生最佳的优化。较低的优化级别允许您通过反复试验来手动调整查询,如果更费力,这可能更可靠。