迅捷搜 SQL 搜索指南
一款可以通过 SQL 语句来快速查找文件的工具。其内部使用了一个虚拟的 alltable 表来代表系统中的所有文件和目录。
01 核心特性
极速搜索
1200 万文件搜索仅需 0.006 秒 。
多种搜索方式
关键词、拼音、首拼、通配符、正则表达式、SQL。
实时更新
使用 USN 日志同步更新,解析 MFT 快速遍历分区。
内容搜索
支持搜索文件内容,不只是文件名。内存占用比 Everything 1.5 少占用接近一半。
02 三种搜索方式
1. 关键词搜索(最简单)
直接输入关键词即可
2. 拼音搜索(中文用户福音)
输入拼音或首拼就能找到文件
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 语法支持
支持的关键字
不支持的关键字
替代方案
| 需求 | 不支持 | 替代方案 |
|---|---|---|
| 去重 | 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 的直接父目录名)
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 高优先级含义:文件或目录的大小
单位支持:纯数字(字节)、K、M、G
-- 查找大于 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 基础搜索
关键词搜索
拼音搜索
-- 按类型搜索
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只匹配 2024AnyParent可匹配 D, Work, Project, 2024
为什么内容搜索很慢?
- 先用其他条件过滤(类型、路径、大小等)
- 将
REGEXP(Content, ...)放在 WHERE 子句最后
如何搜索多个目录?
-- 方法1:使用 OR
WHERE Path LIKE 'D:\Work\%' OR Path LIKE 'E:\Backup\%'
-- 方法2:使用 AnyParent
WHERE AnyParent IN ('Work', 'Backup')