0

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%';`

このシステムにはおそらく100万以上のファイルパスがあるので、この列にインデックスを付ける/この検索を改善する(LIKE %%を削除する)方法はありますか?ファイルパスは200文字以上である可能性があることに注意してください。

4

2 に答える 2

1

できません。ワイルドカード検索ではインデックスは使用されません。
ファイルパスにインデックスを付ける場合、次のようなクエリのみをサポートできます。

/static/images/%

シナリオを前提として、ワイルドカード検索を許可する場合
は、ディレクトリを展開して複数のキーワードにするのが最善の策です。

static
images
revolver
.png

次に、各キーワードをキーワードテーブルに格納
し、関係を構築します。

ワイルドカード検索を実行すると、実際にはキーワードテーブルが検索されます。

于 2013-01-24T18:10:12.637 に答える
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. 

元のファイル名も保存しない限り、元のファイル名を読み取るには少し作業が必要になります。

于 2013-01-24T18:10:45.757 に答える