名前(漢字)とフリガナの検索方法で、どちらが速いのか

概要

検索窓1つで名前(漢字)とフリガナの両方を受け付けるようなUIにしてしまった際に、

これと

select * from TABLE_1
where
 kanji like '%テスト%'
 or
 furigana like '%テスト%'

これと

select * from TABLE_1
where
 kanji+furigana like '%テスト%'

どっちが速いんでしょうかね?という話(ビミョーに結果は違うけど)。

で、こういうテーブル作って

image

こんなデータを入れて検証してみました。

insert into Table_1 values ('賞践識楠醸仇詠片侮狐旦慮特撤U字放蜂舎', '没沖収劫<㊦鱒脆欠')
insert into Table_1 values ('奮侯耳禿智ヱⅧ泳蓬員億幽晶暦デヾ貨ゑ鈎', '什貧歎窒')
insert into Table_1 values ('リ腸脹呉瞳裂噺遂箸琢', '┿①橘')
insert into Table_1 values ('単器鍔郡р就花偉よ', '眺肋閲糟泣静┯葎起㎜宇播')
insert into Table_1 values ('宍難賀働松覆誇咋噛福鍋', 'ぇ風慌郊醜皐侍観┸Ⅲ紀挺諾')
insert into Table_1 values ('有廉', '平晴兄⑤ト胴P厨柿伝悟興柵越穣⑬C醸孔')
insert into Table_1 values ('々敦討伏猫亦④腿又椴鋤念', '余寧損吏さ仝減キ栗劫')
insert into Table_1 values ('迭態売至帯纏壷冠芯勺', '格享亦避桔穣費拍Ⅵ梶臨')
………………

文字列は超適当にランダムで作成しています。

レコード数は5万行程度です。

クエリは部分一致のみのものなので、PK以外にはインデックスは張っていません(※sidはIDENTITYなPKです)。

結果

それぞれの実行プランはこんな感じ。

 

select * from TABLE_1 where  kanji like '%テスト%'  or  furigana like '%テスト%'

image

 

select * from TABLE_1 where  kanji+furigana like '%テスト%'

image

なにやらほぼ同じように見えますが…。おそらく、内部的な負荷はあんまり変わらないんだろうなーと思う次第です。

個人的には前者にしたいですね。後者は読みにくいし、評価式の左辺に演算が入るのはちょっとイヤです。

まぁそれよりも、こんなクエリを必要とするUIにしないというのがより根源的な話で…ゲフンゲフン

コメントを残す