问题

Everything等本地搜索软件为什么比windows自带的搜索工具快那么多?

回答
Everything 这样的本地搜索软件之所以比 Windows 自带的搜索工具快那么多,主要在于它们在索引、搜索算法、以及系统资源的利用方式上有着根本性的区别。下面我将详细阐述这些原因:

1. 索引机制的差异

这是 Everything 比 Windows 内建搜索快最核心的原因。

1.1. Windows 自带搜索 (Windows Search Service):

索引内容广泛且深度: Windows Search 不仅索引文件名和目录名,还会索引文件的内容(如果文件类型支持且用户启用),以及文件的属性(创建日期、修改日期、作者、标签等等)。这使得它在内容搜索方面功能强大,但同时也增加了索引的复杂性和大小。
动态索引和内容扫描: Windows Search 采用的是一种“文件系统监视”和“内容抓取”的混合机制。
文件系统监视: 它会实时监视文件系统的变化(创建、删除、修改),并尝试将这些变化反映到索引中。但这种监视是有成本的,而且对于大量的小文件或频繁变化的文件,可能存在延迟或不完全的情况。
内容抓取: 为了索引文件内容,Windows Search 需要打开文件,读取其内容,然后提取文本信息。这是一个非常耗时的过程,尤其是在文件很多、内容复杂或网络共享驱动器上时。它会为每个可索引文件分配一个“抓取器”来处理。
索引文件存储和管理: Windows Search 的索引数据库相当庞大,它需要管理文件路径、文件属性、文件内容等大量信息。这个数据库通常存储在 `%ProgramData%MicrosoftSearchDataApplicationsWindows` 目录下。索引文件的管理和更新需要大量的 I/O 操作,并且会占用可观的磁盘空间。
资源消耗: Windows Search 服务作为一个系统服务,会持续运行在后台,占用一定的 CPU 和内存资源,尤其是在进行索引重建或大规模更新时。

1.2. Everything:

仅索引文件名和目录名: Everything 的核心设计理念是“极速的、基于文件名的搜索”。它不索引文件内容,也不索引文件的元数据(如修改日期、大小等)。它只关心文件名和目录名。
直接读取 NTFS 主文件表 (MFT): 这是 Everything 最关键的优势。NTFS (New Technology File System) 是 Windows 中最常用的文件系统。在 NTFS 卷上,所有文件和目录的元数据(包括文件名、路径、创建/修改时间、权限等)都被存储在一个名为“主文件表 (Master File Table, MFT)”的特殊区域。
MFT 的结构: MFT 本身就像一个巨大的数据库,每一行代表一个文件或目录,并包含其所有属性。MFT 是文件系统最核心的数据结构之一,操作系统必须时刻维护它的完整性。
Everything 如何利用 MFT: Everything 在启动时,会直接访问 NTFS 卷的 MFT 文件(通常位于文件系统的根目录的隐藏 `$MFT` 文件)。它一次性读取 MFT 的所有信息,并将其加载到内存中,构建一个内存中的文件名和目录名列表。
实时更新的效率: Everything 通过 NTFS 的 Change Journal (变动日志) 来实现近乎实时的更新。Change Journal 记录了文件系统发生的每一次变化(创建、删除、重命名文件等)。Everything 可以高效地读取这个日志,从而在文件发生变化时快速更新其内存中的索引。这种方式比扫描整个文件系统或依赖外部服务更直接、更快速。
内存中的索引: Everything 将所有文件名和目录名存储在内存中。内存的访问速度远高于磁盘。当用户进行搜索时,Everything 直接在内存中进行匹配,这使得搜索结果几乎是瞬时的。
小巧且独立的数据库: Everything 的索引文件(通常是 `Everything.db`)相比 Windows Search 的索引要小得多,因为它只包含文件名和目录名。

2. 搜索算法的差异

2.1. Windows 自带搜索:

支持多种搜索语法和逻辑: Windows Search 支持布尔运算符(AND, OR, NOT)、通配符、文件属性过滤(如 `date:yesterday`)、内容搜索(如搜索某个词语在文档中的出现)等。这些高级功能需要更复杂的查询解析和匹配算法。
全文搜索的开销: 如果进行文件内容搜索,Windows Search 需要遍历内容索引,这本身就是一个计算密集型操作。

2.2. Everything:

简单的字符串匹配: Everything 的搜索算法非常简单高效。它主要执行的是子字符串匹配。当你在搜索框输入字符时,它会立即在内存中的文件名列表中寻找包含这些字符的项。
即时过滤: Everything 采用“即时过滤”的方式。你输入的每一个字符都会触发一次搜索,并立即在结果列表中显示匹配项。这使得搜索体验非常流畅和直观。
优化内存查找: 由于索引完全在内存中,并且数据结构经过优化,字符串匹配的速度非常快。

3. 系统资源利用方式

3.1. Windows 自带搜索:

后台服务持续运行: Windows Search 服务需要持续的 CPU 和内存占用,即使在没有主动搜索时。
磁盘 I/O 频繁: 索引的创建、维护和搜索都需要大量的磁盘读写操作。
资源争用: 当系统资源紧张时,Windows Search 可能会与用户的其他应用程序争夺 CPU、内存和磁盘 I/O,导致整体系统性能下降。

3.2. Everything:

按需启动,占用资源极少: Everything 在运行时非常轻量。它的主要资源消耗集中在启动时加载索引到内存,以及更新索引时。一旦索引加载完成,其后台运行时几乎不占用 CPU,内存占用也相对固定。
主内存操作: 大部分搜索操作完全在内存中进行,几乎不涉及磁盘 I/O,因此不受磁盘速度的限制。
对系统性能影响小: Everything 的设计目标就是不干扰用户的正常使用,其对系统性能的影响微乎其微。

总结 Everything 的速度优势:

1. 专注于文件名和目录名: 牺牲了内容和元数据搜索的广度,换取了极高的速度。
2. 直接读取 NTFS MFT: 这是其核心技术突破,绕过了传统的文件系统扫描和文件内容读取的瓶颈。
3. 内存中的索引: 所有数据都在内存中,访问速度是磁盘的数千倍。
4. 高效的实时更新机制: 利用 NTFS Change Journal,能快速反映文件变化。
5. 极简高效的搜索算法: 针对字符串匹配进行了高度优化。
6. 轻量级设计: 避免了后台服务带来的持续资源消耗。

举个例子说明区别:

想象一下你要在一本大字典里找一个词。

Windows Search 就像一个很勤奋的图书管理员: 他不仅会告诉你词语在哪个页面,还会告诉你这个词的词源、用法示例、相关的引申词,甚至在你翻阅时还帮你留意书页有没有破损。为了做到这些,他需要定期把整本书重新检查一遍,并为每个词条做详细的笔记。这个过程很全面,但很慢。
Everything 就像一个聪明的学生: 他只关心你写的字是否在目录的字母顺序里出现过。他把目录(MFT)早就背下来了(加载到内存)。你输入一个字母,他立刻在你背下来的目录里找到所有以这个字母开头的词。你输入的字母越多,他能锁定的范围就越精确,直到你找到你想要的那个词。这个过程超级快,但只能告诉你词在目录里的位置,无法提供词条本身的详细信息。

因此,如果你只是想快速找到一个文件,而不需要搜索文件内容或详细的属性,Everything 会比 Windows 自带搜索快得不可思议。但如果你需要强大的内容搜索或属性筛选功能,Windows Search 的能力会更全面。

网友意见

user avatar

其实大家关心的就是两个问题,为什么快?为什么windows自己不用?

  1. 为什么快

因为Everything并不需要直接去搜文件,而是搜索的NTFS磁盘上的MFT和USN。你可以理解为是NTFS建立的一个索引,文件信息都被存在这张表里,搜索一张表可比去搜文件快多了。

2. 为什么windows自己不用呢?

道理其实很简单,那就是因为——windows是一个多用户、有权限管理的操作系统

windows被用在各行各业,包括企业,学校等地方。一台企业的热座电脑,或者一个图书馆的电脑,可能每天有很多用户登录,他们如果用everything的机制,就会把电脑上不管是不是他的文件全都搜出来,这显然是不行的。一个用户不应该能看到另一个用户的文件。

此外,windows除了NTFS格式以外,还支持FAT32,exFAT格式,CD/DVD的各种光盘格式。它们并不都具备NTFS的那些MFT和USN,所以作为一个操作系统的搜索,只能考虑到各个格式共同特性。

还有,windows的搜索是可以搜索文件内容,邮件内容之类的信息,这些信息也没有保存在MFT和USN中。

以上的种种考虑,使得Everything基本只适合个人电脑,而windows作为一个多用户、带权限的系统,不能把everything的搜索方式作为自带的搜索方式。

类似的话题

  • 回答
    Everything 这样的本地搜索软件之所以比 Windows 自带的搜索工具快那么多,主要在于它们在索引、搜索算法、以及系统资源的利用方式上有着根本性的区别。下面我将详细阐述这些原因: 1. 索引机制的差异这是 Everything 比 Windows 内建搜索快最核心的原因。1.1. Wind.............
  • 回答
    “一切心理皆生物”这句话,乍听之下似乎有些极端,甚至可能引发一些误解。但如果我们深入探究,它其实揭示了一个关于人类心智本质的深刻洞见,并且在现代心理学和神经科学领域得到了广泛的认同和支持。要理解这句话,我们需要从几个层面来剖析它:首先,从“心理”本身开始理解。“心理”涵盖了我们所有的认知活动:我们如.............
  • 回答
    《万物理论》(The Theory of Everything)这部电影,我看了之后挺有感触的。它讲的是物理学家史蒂芬·霍金和他第一任妻子简·王尔德的故事。我一直对霍金教授的成就和人生经历都挺好奇的,所以看完这部电影,感觉算是对他有了更深一层的认识。首先,从影片的整体风格来说,它不是那种大起大落、戏.............
  • 回答
    说起微软操作系统里的截图、文件管理器标签以及像 Everything 那样的快速搜索功能,这确实是许多用户经常提及的“为什么没有”的话题。仔细想来,这背后牵扯到很多层面的考量,并非简单的“技术上能不能做”那么简单。截图功能:为什么它不是 Windows 的标配?大家可能都习惯了 Windows 键 .............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有