為什麼有些檔案搜尋是即時的
2026 年 7 月 15 日 · 作者:PowerFind 團隊
在某些搜尋工具裡打幾個字,結果就已經在那裡了——不用等、沒有進度條。同樣幾個字打進別的工具, 你卻得盯著它一個資料夾接一個資料夾慢慢掃過整顆磁碟。這中間的差別不是什麼把戲,關鍵在於 搜尋往哪裡找。這篇文章用白話帶你認識讓「即時搜尋」成真的兩個 NTFS 功能: 主檔案表與 USN 變更日誌。
慢的做法:打開每一個資料夾
假設你想找出磁碟上所有檔名含有「發票」兩個字的檔案。最直接的做法,是從磁碟最上層開始, 列出第一個資料夾裡有什麼,再走進每個子資料夾、列出裡面有什麼,就這樣一路走到你已經拜訪過 磁碟上的每一個資料夾為止。這通常稱為「走訪資料夾樹」。
它是可行的,而且對單一資料夾來說很快。問題出在規模。一台常見的 Windows 磁碟裡有幾十萬—— 有時上百萬——個檔案與資料夾。逐一拜訪,代表每一步都要向磁碟問一個獨立的問題,這些問題累積 起來就很可觀。有些搜尋工具就是像這樣逐一掃描資料夾,所以在滿載的磁碟上會覺得慢:工作量隨著 資料夾數量增加,而資料夾實在很多。
快的做法:改成讀一張表
關鍵的想法在這裡。在用 NTFS 格式化的磁碟上——NTFS 是 Windows 用了幾十年的檔案系統——本來 就有一個內建結構,已經把磁碟區上的所有東西列成清單。它叫做主檔案表,也就是 MFT。
MFT 為磁碟上每一個檔案與每一個資料夾各存一筆記錄。每筆記錄存的是該項目的 metadata ——也就是「關於這個檔案」的資料,而不是檔案內容本身:它的名稱、大小、上次修改時間、屬性, 以及它位於哪個資料夾。NTFS 之所以維護這張表,是因為它得靠它來管理磁碟;這不是哪個搜尋工具 另外做出來的東西。
這讓整個問題改觀。程式不必為了得知一百萬個名稱而去拜訪一百萬個資料夾,而是讀這一張表、 一次就把每個名稱都讀進來。讀一張整理好的表,遠比挨家挨戶敲每個資料夾的門省事。這就是為什麼 讀取 MFT 的工具,能在幾秒內建好索引,之後在毫秒級內回答搜尋。廣為人知的 Windows 搜尋工具 Everything 就是這樣運作;PowerFind 也以同樣的方式讀取 MFT。
一個簡單的對照
| 走訪每個資料夾 | 讀取 MFT | |
|---|---|---|
| 它拜訪什麼 | 一次一個,逐一走過每個資料夾 | 一張已列好全部項目的表 |
| 磁碟越大、工作量如何變化 | 隨資料夾數量增加 | 把表讀過一遍 |
| 在滿載磁碟上的體感 | 看得到的掃描過程 | 幾乎立刻就緒 |
| 需要的存取權限 | 一般檔案存取 | 低階磁碟區存取(一次系統管理員授權) |
為便於說明而簡化;實際工具會在此之上再加上快取等其他優化。
保持最新:USN 變更日誌
讀取一次 MFT,得到的是一張快照——磁碟在那一刻的索引。但磁碟不會靜止不動。你存下一份文件、 下載一個檔案、刪掉一個舊資料夾。如果索引從此不再更新,它幾分鐘內就會過時,你會開始在結果裡 看到已經不存在的檔案,或漏掉你剛建好的檔案。
一種辦法是每隔一段時間就把整張 MFT 重讀一次。但那很浪費——磁碟上絕大部分根本沒變。NTFS 提供了 更好的東西:USN 變更日誌,全名是 Update Sequence Number Journal。它是檔案系統 為這個磁碟區維護的一份變更紀錄。
每當有檔案被建立、修改、重新命名或刪除,NTFS 就往這份日誌裡寫進一筆簡短的記錄,描述發生了什麼事。 每一筆記錄都蓋上一個號碼——也就是那個更新序號(USN)——而它只會一路往上數。正是這個細節,讓這份 日誌對搜尋工具格外好用。
工具可以記住自己已經處理到的最後一筆記錄的號碼。之後,它只要向日誌要「排在那個號碼之後的所有記錄」。 一次小小的讀取,就得到確切的變更清單——這個檔案新增了、那個被改名了、另一個被刪掉了——然後只更新 索引裡的那幾筆。其他什麼都不必重新檢查。這就是索引不必重掃磁碟、卻能保持即時的方法;PowerFind 也正是 這樣讓搜尋結果和你的磁碟對得上。
當日誌已經往前捲走
這份日誌的大小是有限的,所以最舊的記錄終究會被捲掉、騰出空間。如果一個工具關閉了很久,等它回來時, 它記住的那筆記錄可能早已不在了。NTFS 也會給每份日誌一個識別碼,而這個識別碼會在日誌被重建時改變。 當工具察覺到這兩種情形之一——它記住的位置已經太舊而被淘汰、或識別碼不再吻合——它就知道自己無法安全地 補回中間缺掉的那段,於是退回去重新讀取一次 MFT,取得一張全新、完整的快照。在日常使用中這很少發生; 平時的工作都是靠日誌重播完成的。
把它們合起來看
所以,Windows 上即時檔名搜尋的配方就兩個部分,而且兩者都不稀奇——它們都是 NTFS 存在多年的標準功能:
讀取一次 MFT,一次就把每個檔案的名稱與細節建成索引,而不是一個資料夾一個資料夾地走; 接著跟著 USN 變更日誌走,只套用變動的部分,而不是重掃。這就是為什麼搜尋能在你還沒打完字 之前就已就緒的全部原因。那種比較慢、逐一走資料夾的工具其實並沒有壞掉——它只是在一個比較花時間的地方找。 而即時的工具,只是往一個答案早已彙整好的地方去找。
PowerFind 正是建立在這套做法上。它讀取 MFT 來為你的檔案建立索引,並監看 USN 變更日誌以保持最新,這就是 檔名搜尋能在毫秒級內回應的原因。在同一份索引之上,它也能搜尋檔案內容、啟動程式,還有更多——但檔名搜尋的 速度,直接來自這篇文章裡的這兩個想法。
常見問題
NTFS 主檔案表(MFT)是什麼?
主檔案表是 NTFS 在每個 NTFS 格式磁碟上都會維護的一個系統結構。磁碟上的每一個檔案與資料夾在裡面各有一筆記錄,這筆記錄存的是該項目的 metadata:名稱、大小、時間戳記、屬性,以及它屬於哪個資料夾。因為整顆磁碟上所有東西的名稱都集中在這一張表裡,程式可以讀這張表、一次得知每一個檔名,而不必逐一打開每個資料夾。
為什麼 Everything、PowerFind 的檔名搜尋這麼快?
兩者都直接讀 NTFS 主檔案表來建立索引,而不是一層一層走過整棵資料夾樹。讀一張表遠比走訪數百萬個資料夾省事,所以初次索引很快就建好,搜尋也在毫秒級內回應。它們靠監看 USN 變更日誌來保持最新,而不是重掃整顆磁碟。
USN Journal(USN 變更日誌)是什麼?
USN 變更日誌(Update Sequence Number Journal)是 NTFS 為每個磁碟區維護的一份變更紀錄。每當有檔案被建立、修改、重新命名或刪除,NTFS 就在日誌後面追加一筆記錄,並附上一個只會遞增的號碼。搜尋工具可以記住自己上次處理到的號碼,之後只讀取排在那之後的記錄——如此就能得知到底變了什麼,而不必重讀整顆磁碟。
讀取 MFT 需要系統管理員權限嗎?
讀取原始的主檔案表與 USN 變更日誌屬於低階磁碟區存取,在 Windows 上需要較高的權限。這就是為什麼採用這種做法的工具,通常會在啟動時要求一次系統管理員授權。這是為了換取速度:正是它讓「索引整顆磁碟」變成很快、而不是很慢。