4.
テスト結果
検索処理が、どの程度速くなるかテストしました。
データベース:
Microsoft SQL Server 2014 Express
テーブル:SimpleSentence
列名 |
データ型 |
ID |
int |
SENTENCE |
ntext |
CC_SENTENCE |
bigint |
データ:
青空文庫からダウンロードした小説、十数本のテキスト・データ。
25~30文字に区切ったテキストをSENTENCE列に格納。(同じ小説を複数回使用)
レコード数は、約30万件(306,516件)。
結果は以下のとおりです。
|
LIKE のみで検索 |
文字成分表を使用して検索 |
検索語 |
処理時間 |
ヒット件数 |
処理時間 |
ヒット件数 |
絞り込み件数 |
明日 |
1825 |
437 |
125 |
437 |
8524(3%) |
両親 |
1810 |
105 |
156 |
105 |
18541(6%) |
富士山 |
1841 |
117 |
62 |
117 |
2566(1%) |
町 |
2246 |
3816 |
1201 |
3816 |
134382(44%) |
王 |
2090 |
2888 |
1077 |
2888 |
139357(45%) |
の |
14071 |
211602 |
13977 |
211602 |
219983(72%) |
い |
12496 |
177937 |
12558 |
177937 |
189077(62%) |
ビール |
1841 |
293 |
141 |
293 |
13339(4%) |
そして |
2060 |
3098 |
733 |
3098 |
42668(14%) |
必ず |
1856 |
610 |
421 |
610 |
52291(17%) |
しまいました。 |
1903 |
862 |
312 |
862 |
29006(9%) |
かも知れない |
1981 |
1737 |
374 |
1737 |
3945(1%) |
-
“処理時間”の単位はミリ秒です。実行するたびに異なりますので、数%の幅はあると考えてください。
-
“ヒット件数”は、検索結果が同じになることを確認するために記載しています。
-
“絞り込み件数”は、文字成分表によって絞り込まれたレコード数です。
LIKE 演算子だけの検索では、ヒット件数が極端に多い場合を除いて、だいたい同じ処理時間になっています。
文字成分表を使用する場合、処理時間は絞り込み件数に大きく依存しますので、検索語によって、かなり異なります。
検索語が2文字以上の場合には、有効に機能していることがわかります。
改善案
-
各文字に対するビット位置の調整
各文字の平均的な出現回数を調べ、文字成分表のビット位置を調整すると効率が上がるかも知れません。 -
文字成分表を大きくする
bigintの列を2つ使用して、文字成分表を64bitから128bitにします。