DOCUMENTATION

迅捷搜 SQL 搜索指南

一款可以通过 SQL 语句来快速查找文件的工具。其内部使用了一个虚拟的 alltable 表来代表系统中的所有文件和目录。

01 核心特性

极速搜索

1200 万文件搜索仅需 0.006 秒 。

多种搜索方式

关键词、拼音、首拼、通配符、正则表达式、SQL。

实时更新

使用 USN 日志同步更新,解析 MFT 快速遍历分区。

内容搜索

支持搜索文件内容,不只是文件名。内存占用比 Everything 1.5 少占用接近一半。

02 三种搜索方式

1. 关键词搜索(最简单)

直接输入关键词即可

项目报告

2. 拼音搜索(中文用户福音)

输入拼音或首拼就能找到文件

xmbg 找到「项目报告.docx」
ht 找到「合同.pdf」

3. SQL 搜索(最强大)

用熟悉的 SQL 语法进行复杂查询

SELECT * FROM alltable WHERE FileType = '视频' AND Size > '100M';

03 多语句链式查询

支持多条 SQL 同时筛选,下一条查询的数据依赖上一条的结果,可以代替子查询。

-- 第1条:找出视频文件超过10个的目录
SELECT ParentPath FROM alltable WHERE FileType='视频' GROUP BY ParentPath HAVING COUNT(*) > 10;

-- 第2条:在这些目录中找大于1G的文件
SELECT * FROM alltable WHERE Size>'1G' ORDER BY Size DESC;
-- 第1条:返回所有有文件的目录(去重)
SELECT ParentPath FROM alltable WHERE IsDir=0;

-- 第2条:在这些目录中找大于1G的
SELECT * FROM alltable WHERE Size > '1G';

04 注意事项

重要提示

  • SQL 语句不要包含换行,请写成一行。
  • 部分关键字暂不支持(详见语法支持章节)。

输出字段说明

输出 含义
SELECT * 输出所有匹配的文件
SELECT ParentPath 输出父目录(自动去重)
-- 输出文件
SELECT * FROM alltable WHERE Ext = 'pdf';

-- 输出目录(统计每个目录有多少个PDF)
SELECT ParentPath FROM alltable WHERE Ext = 'pdf' GROUP BY ParentPath;

05 SQL 语法支持

支持的关键字

FROM WHERE LIKE NOT LIKE NOT OR AND IN = != > < >= <= BETWEEN GROUP BY HAVING LIMIT COUNT() ORDER BY

不支持的关键字

UNION DISTINCT INNER JOIN DATE() 子查询 AS (别名) + - * / (算术运算)

替代方案

需求 不支持 替代方案
去重 DISTINCT SELECT ParentPath 自动去重
连接查询 JOIN 多语句链式查询
日期函数 DATE() NOW() 函数

06 字段总览

CREATE TABLE alltable (
    Path        TEXT,      -- 完整文件路径
    FName       TEXT,      -- 文件名(不含扩展名)
    Ext         TEXT,      -- 扩展名
    ParentName  TEXT,      -- 直接父目录名称
    ParentPath  TEXT,      -- 直接父目录路径
    AnyParent   TEXT,      -- 任意一级父目录名称
    Size        TEXT,      -- 文件大小
    ModTime     DATETIME,  -- 修改时间
    FileType    TEXT,      -- 文件类型分类
    IsDir       INTEGER,   -- 是否为目录
    Alias       TEXT,      -- 别名
    Content     BLOB       -- 文件内容(用于内容搜索)
);

07 字段详细说明

FName 文件名

TEXT 较低优先级

含义:文件或目录的名称(不含扩展名)

示例值:'项目报告'(对应文件 项目报告.docx)

-- 查找文件名包含「报告」的文件
WHERE FName LIKE '%报告%'

-- 查找文件名以数字开头的文件
WHERE REGEXP(FName, '^[0-9]')

Ext 扩展名

TEXT 一般优先级

含义:文件的扩展名(不含点号)

示例值:'txt', 'pdf', 'mp4'

-- 查找所有 PDF 文件
WHERE Ext = 'pdf'

-- 查找多种图片格式
WHERE Ext IN ('jpg', 'png', 'gif', 'bmp')

Path 完整路径

TEXT 低优先级

含义:文件或目录的完整路径

用途:限定搜索的目录范围

-- 搜索 D:\Work 及其所有子目录
WHERE Path LIKE 'D:\Work\%'

-- 搜索多个目录
WHERE Path LIKE 'D:\Work\%' OR Path LIKE 'E:\Backup\%'

-- 排除某个目录
WHERE Path NOT LIKE 'D:\Temp\%'

ParentName 直接父目录名称

TEXT 中优先级

含义:文件所在的直接上级文件夹名称(仅最后一级)

示例值:'Project'(路径 D:\Work\Project\报告.docx 的直接父目录名)

与 AnyParent 的区别:
ParentName:只匹配直接父目录
AnyParent:匹配任意一级父目录
-- 查找直接位于「Project」文件夹中的文件
WHERE ParentName = 'project'

AnyParent 任意父目录名称

TEXT 低优先级

含义:文件路径中任意一级目录的名称

重要提示:

  • 只需输入目录名称,不需要完整路径
  • 不区分大小写
  • 可以匹配路径中的任意一级目录
  • 不存在的目录名会被自动忽略
-- 查找所有在「Work」文件夹下的文件(任意层级)
WHERE AnyParent = 'Work'

-- 查找在多个文件夹下的文件
WHERE AnyParent IN ('Work', 'Project', 'Backup')

路径示例:D:\Work\Project\2024\报告.docx

以下条件都能匹配到这个文件:

WHERE AnyParent = 'Work'      -- ✅ 匹配
WHERE AnyParent = 'Project'   -- ✅ 匹配
WHERE AnyParent = '2024'      -- ✅ 匹配
WHERE AnyParent = 'D'         -- ✅ 匹配(盘符也能匹配)

与 ParentName 的对比

字段 匹配范围 示例 D:\Work\Project\2024\报告.docx
ParentName 仅直接父目录 只匹配 2024
AnyParent 任意一级目录 匹配 D, Work, Project, 2024

ParentPath 直接父目录路径

TEXT 低优先级

含义:文件所在的直接父目录完整路径

用途:精确查找指定目录下的一级子文件/目录(不递归)

-- 只查找 D:\Documents 下的直接文件(不包含子文件夹)
WHERE ParentPath = 'D:\Documents' AND IsDir = 0

-- 统计每个目录下的文件数量
SELECT ParentPath, COUNT(*) FROM alltable GROUP BY ParentPath

Size 文件大小

TEXT 高优先级

含义:文件或目录的大小

单位支持:纯数字(字节)、KMG

-- 查找大于 100MB 的文件
WHERE Size > '100M'

-- 查找小于 1GB 的文件
WHERE Size < '1G'

-- 查找 10MB 到 100MB 之间的文件
WHERE Size BETWEEN '10M' AND '100M'

-- 查找大于 1GB 的视频文件
WHERE FileType = '视频' AND Size > '1G'

ModTime 修改时间

DATETIME 高优先级

含义:文件或目录的最后修改时间

格式:'YYYY-MM-DD HH:MM:SS'

-- 查找今天修改的文件
WHERE ModTime >= NOW('start of day')

-- 查找最近 7 天修改的文件
WHERE ModTime >= NOW('-7 days')

-- 查找最近一个月修改的文件
WHERE ModTime >= NOW('-1 month')

-- 查找指定时间段的文件
WHERE ModTime BETWEEN '2025-01-01 00:00:00' AND '2025-06-30 23:59:59'

FileType 文件类型

TEXT 高优先级

含义:文件的分类标签(中文)

注意:只支持 =!=,不支持 LIKE

支持的类型

类型 包含的扩展名
视频mp4, avi, mkv, mov, wmv, flv, rmvb, webm...
音频mp3, flac, wav, aac, m4a, ogg, wma...
图片jpg, jpeg, png, gif, bmp, webp, psd, svg...
办公doc, docx, xls, xlsx, ppt, pptx, pdf, csv...
文档txt, md, html, htm, xml, json, ini...
压缩包zip, rar, 7z, tar, gz, iso...
程序exe, msi, bat, cmd...
快捷方式lnk
文件夹目录
-- 查找所有视频文件
WHERE FileType = '视频'

-- 排除程序文件
WHERE FileType != '程序'

IsDir 是否为目录

INTEGER 高优先级

含义:判断是文件还是目录

取值:1 = 目录,0 = 文件

-- 只查找文件
WHERE IsDir = 0

-- 只查找目录
WHERE IsDir = 1

Alias 别名

TEXT 较低优先级

含义:用户设置的文件别名

-- 查找有别名的文件
WHERE Alias != ''

-- 查找特定别名
WHERE Alias = '我的合同'

Content 文件内容

BLOB 最低优先级

含义:文件的文本内容(用于内容搜索)

性能注意:

  • 搜索文件内容非常耗时
  • 务必将 Content 条件放在 WHERE 子句的最后
  • 程序会自动跳过超过 1GB 的文件
-- 正确:先用其他条件过滤,最后才搜索内容
WHERE Ext IN ('txt', 'md') AND Path LIKE 'D:\Work\%' AND REGEXP(Content, '关键词')

-- 错误:先搜索内容,会非常慢
WHERE REGEXP(Content, '关键词') AND Ext = 'txt'

08 函数

REGEXP(字段, '正则表达式')

对指定字段应用正则表达式匹配。
支持的字段:FName, Content, Path, ParentPath

-- 文件名以数字开头
WHERE REGEXP(FName, '^[0-9]')

-- 文件名包含中文
WHERE REGEXP(FName, '[\u4e00-\u9fa5]')

-- 内容包含邮箱
WHERE REGEXP(Content, '[\w.]+@[\w.]+')

-- 不区分大小写
WHERE REGEXP(FName, '(?i)readme')

-- 内容包含「错误」或「error」(不区分大小写)
WHERE REGEXP(Content, '(?i)(错误|error)')

NOW() 时间函数

获取当前时间或计算相对时间。

NOW()                      -- 当前时间
NOW('start of day')        -- 今天零点
NOW('start of month')      -- 本月第一天零点
NOW('start of year')       -- 本年第一天零点
NOW('-7 days')             -- 7天前
NOW('-1 month')            -- 1个月前
NOW('-1 year')             -- 1年前
NOW('+1 hour')             -- 1小时后
NOW('-30 minutes')         -- 30分钟前
-- 今天修改的文件
WHERE ModTime >= NOW('start of day')

-- 最近一周修改的文件
WHERE ModTime >= NOW('-7 days')

-- 最近一个月的文档
WHERE FileType = '办公' AND ModTime >= NOW('-1 month')

09 使用示例

1 基础搜索

关键词搜索

项目报告

拼音搜索

xmbg
-- 按类型搜索
WHERE FileType = '视频'

-- 按扩展名搜索
WHERE Ext = 'pdf'
WHERE Ext IN ('doc', 'docx', 'pdf')

2 大小筛选

-- 查找大于 100MB 的文件
WHERE Size > '100M'

-- 查找大于 1GB 的视频
WHERE FileType = '视频' AND Size > '1G'

-- 查找 C 盘大文件
WHERE ParentPath LIKE 'C:%' AND Size > '500M'

-- 查找大于 100MB 的目录
WHERE IsDir = 1 AND Size > '100M'

3 时间筛选

-- 今天修改的文件
WHERE ModTime >= NOW('start of day')

-- 最近 7 天修改的文件
WHERE ModTime >= NOW('-7 days')

-- 最近一个月修改的 Word 文档
WHERE Ext = 'docx' AND ModTime >= NOW('-1 month')

-- 2025年上半年的文件
WHERE ModTime BETWEEN '2025-01-01 00:00:00' AND '2025-06-30 23:59:59'

4 目录筛选

-- 搜索 D:\Work 及其子目录
WHERE Path LIKE 'D:\Work\%'

-- 搜索 D 盘所有文件
WHERE Path LIKE 'D:\%'

-- 搜索特定目录下的文件(不递归)
WHERE ParentPath = 'D:\Documents'

-- 查找「Project」文件夹下的所有文件(任意层级)
WHERE AnyParent = 'Project'

-- 查找多个文件夹下的文件
WHERE AnyParent IN ('Work', 'Project', 'Backup')

-- 排除临时文件夹
WHERE Path NOT LIKE 'D:\Temp\%' AND Path NOT LIKE 'D:\Trash\%'

5 高级查询

-- 文件名以数字开头
WHERE Ext = 'txt' AND REGEXP(FName, '^[0-9]')

-- 文件名包含日期格式
WHERE REGEXP(FName, '[0-9]{4}-[0-9]{2}-[0-9]{2}')

-- 在代码文件中搜索关键词
WHERE Ext IN ('py', 'js', 'ts', 'java') AND REGEXP(Content, 'getUserInfo')

-- 在文档中搜索(不区分大小写)
WHERE Ext IN ('txt', 'md') AND REGEXP(Content, '(?i)年度预算')

-- 限定目录搜索内容
WHERE Path LIKE 'D:\Work\%' AND Ext = 'txt' AND REGEXP(Content, '合同')

6 重复文件检测

-- 查找重复文件(按内容MD5)
SELECT * FROM alltable GROUP BY Content HAVING COUNT(*) > 1 ORDER BY Size DESC;

-- 查找指定目录的重复文件
SELECT * FROM alltable WHERE Path LIKE 'D:\Download\%' GROUP BY Content HAVING COUNT(*) > 1;

-- 查找大小和扩展名相同的文件(快速筛查)
SELECT * FROM alltable WHERE IsDir = 0 GROUP BY Size, Ext HAVING COUNT(*) > 10;

7 统计分析

-- 统计各类型文件数量
SELECT FileType, COUNT(*) FROM alltable GROUP BY FileType ORDER BY COUNT(*) DESC;

-- 找出文件最多的目录
SELECT ParentPath, COUNT(*) FROM alltable GROUP BY ParentPath ORDER BY COUNT(*) DESC LIMIT 20;

-- 找出视频文件超过 50 个的目录
SELECT ParentPath FROM alltable WHERE FileType = '视频' GROUP BY ParentPath HAVING COUNT(*) > 50 ORDER BY COUNT(*) DESC LIMIT 100;

-- 统计各目录占用空间
SELECT ParentPath FROM alltable WHERE IsDir = 0 GROUP BY ParentPath ORDER BY COUNT(*) DESC LIMIT 50;

10 实用模板

清理磁盘

-- 1. 查找大文件
WHERE Size > '500M' ORDER BY Size DESC

-- 2. 查找重复文件
SELECT * FROM alltable GROUP BY Content HAVING COUNT(*) > 1 ORDER BY Size DESC

-- 3. 查找临时文件
WHERE Ext IN ('tmp', 'temp', 'log', 'bak')

-- 4. 查找空目录
WHERE IsDir = 1 AND Size = 0

查找文档

-- 最近一周的文档
WHERE FileType = '办公' AND ModTime >= NOW('-7 days')

-- 某个项目相关的所有文件
WHERE AnyParent = 'MyProject'

-- 内容包含关键词
WHERE Ext IN ('docx', 'pdf', 'txt') AND REGEXP(Content, '关键词')

排除干扰

-- 排除系统目录
WHERE Path NOT LIKE 'C:\Windows\%' 
  AND Path NOT LIKE 'C:\Program Files\%' 
  AND Path NOT LIKE '%\AppData\%'
  AND Path NOT LIKE '%$Recycle.Bin\%'
  AND Path NOT LIKE '%\System Volume Information\%'

11 常见后缀参考

视频文件

mp4, avi, mkv, mov, wmv, flv, rmvb, webm, m4v, 3gp

音频文件

mp3, flac, wav, aac, m4a, ogg, wma, ape

图片文件

jpg, jpeg, png, gif, bmp, webp, psd, svg, ico, tiff

办公文档

doc, docx, xls, xlsx, ppt, pptx, pdf, csv, txt, rtf

编程代码

py, js, ts, java, c, cpp, h, go, rs, php, rb, swift, kt, cs, sql

压缩文件

zip, rar, 7z, tar, gz, iso, bz2

12 常见问题

AnyParent 和 ParentName 有什么区别?
ParentName 只匹配直接父目录名称,AnyParent 匹配路径中任意一级目录名称。

例如路径 D:\Work\Project\2024\报告.docx
  • ParentName 只匹配 2024
  • AnyParent 可匹配 D, Work, Project, 2024
为什么内容搜索很慢?
内容搜索需要读取文件内容,比搜索元数据慢很多。建议:
  1. 先用其他条件过滤(类型、路径、大小等)
  2. REGEXP(Content, ...) 放在 WHERE 子句最后
如何搜索多个目录?
-- 方法1:使用 OR
WHERE Path LIKE 'D:\Work\%' OR Path LIKE 'E:\Backup\%'

-- 方法2:使用 AnyParent
WHERE AnyParent IN ('Work', 'Backup')
SQL 语句可以换行吗?
不可以,请将 SQL 写成一行。