概要
検索窓1つで名前(漢字)とフリガナの両方を受け付けるようなUIにしてしまった際に、
これと
select * from TABLE_1 where kanji like '%テスト%' or furigana like '%テスト%'
これと
select * from TABLE_1 where kanji+furigana like '%テスト%'
どっちが速いんでしょうかね?という話(ビミョーに結果は違うけど)。
で、こういうテーブル作って
こんなデータを入れて検証してみました。
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 '%テスト%'
select * from TABLE_1 where kanji+furigana like '%テスト%'
なにやらほぼ同じように見えますが…。おそらく、内部的な負荷はあんまり変わらないんだろうなーと思う次第です。
個人的には前者にしたいですね。後者は読みにくいし、評価式の左辺に演算が入るのはちょっとイヤです。
まぁそれよりも、こんなクエリを必要とするUIにしないというのがより根源的な話で…ゲフンゲフン