Top >文字成分表によるLIKEの高速化

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にします
PAPER BOWL
NEZEN