在mysql中索引非常长的文件路径的最佳方法

时间:2013-01-24 17:39:07

标签: mysql linux unix database-design

给定以下文件路径,存储在mysql数据库中:

.//.git/refs/remotes/origin/HEAD
.//.git/refs/tags
.//__init__.py
.//__init__.pyc
.//forms.py
.//forms.pyc
.//models.py
.//models.pyc
.//settings.py
.//settings.pyc
.//static
.//static/css
.//static/css/all.css
.//static/images
.//static/images/bg.png
.//static/images/favicon.ico
.//static/images/pds-header-logo.png
.//static/images/pds-logo.png
.//static/images/revolver.png
.//static/js
.//static/js/all.js
.//templates
.//templates/base.html
.//templates/default.html
.//templates/overview.html
.//urls.py
.//urls.pyc
.//views.py
.//views.pyc
.//wsgi.py
.//wsgi.pyc

有人需要能够搜索路径。例如,如果用户搜索“static”,它将在路径中返回带有“static”的结果:

.//static
.//static/css
.//static/css/all.css
.//static/images
.//static/images/bg.png
.//static/images/favicon.ico
.//static/images/pds-header-logo.png
.//static/images/pds-logo.png
.//static/images/revolver.png
.//static/js
.//static/js/all.js

我目前的搜索类似于:

`SELECT path FROM files WHERE path LIKE '%search%';`

有没有办法索引此列/改进此搜索(删除LIKE %%),因为我可能在此系统上有1M +文件路径。请注意,文件路径可能是200多个字符。

2 个答案:

答案 0 :(得分:1)

你做不到。通配符搜索不会使用索引 如果索引文件路径,则只能最好地支持

等查询
/static/images/%

根据您的情况,如果您想允许通配符搜索, 您最好的选择是将目录分解为多个关键字:

static
images
revolver
.png

然后将每个关键字存储到关键字表中,
并建立关系。

当您执行通配符搜索时,实际上是搜索关键字表。

答案 1 :(得分:1)

我猜你实际上可能有一个“部分名称索引”。像这样:

id ! name    ! parent
---------------------
1  ! static  ! 0           // at root. 
2  ! css     ! 1           // Parent is "static"
3  ! all.css ! 2           // parent is css
4  ! images  ! 1           // parent is static
5  ! bg.png  ! 4           // images. 

读取原始文件名需要一些工作,除非你也存储它。