- ベストアンサー
likeとsubstrの使いわけについて
現在、大量データを扱うマスタDB(oracle)に対し、オンライン業務にて曖昧検索を実施する機能を開発しています。 性能を十分に考慮したsqlを組む必要があり、以下のいづれを選択するか判断しかねています。 それぞれの意味合いを十分に理解できておらず申し訳ございませんが、どなたかご教示をお願いします。 ■要件 曖昧検索をして検索を行う。 例)漢字氏名が”林”で始まるお客様を一覧表示 ■実現するためのSQL文 案1)select~ where 漢字氏名 like ’林%’; 案2)select~ where substr(漢字氏名,0,2)=’林’; ※漢字氏名の型はvarchar2です。 処理時間(oracleのコスト的には)どちらも変わりませんかね? 以上、宜しくお願いいたします
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
漢字氏名列に索引がある場合、LIKE検索では、レンジスキャン可能です。 substrなど関数を介す場合は、一般的には索引を用いません。 ただし、substr関数を使うことが分かっている場合は、ファンクション索引を 使うことでファンクション索引に合致する検索であれば索引が利用できます。 仮に索引がない場合、LIKEでもsubtr関数でもフルスキャンですから、 substr関数のオーバーヘッド程度の違いしか生まれません。 索引の有無で変わってくるので、実際にどちらが効果的かは、実行計画を自ら比較してください。
その他の回答 (1)
- jhayashi
- ベストアンサー率29% (535/1843)
私なら 漢字氏名にindex付けて like検索します。 検索文字数が 必ず全角1文字とかならいいですが「山田」「早乙女」等 長さが変わるでしょうし。 like検索ににしておけば業務アプリ側で制限さえかけなければ '%太郎' '%純一% 等で後方一致・部分一致も簡単に実装できるかと (フルスキャンしますが)