現在、大量データを扱うマスタDB(oracle)に対し、オンライン業務にて曖昧検索を実施する機能を開発しています。
性能を十分に考慮したsqlを組む必要があり、以下のいづれを選択するか判断しかねています。
それぞれの意味合いを十分に理解できておらず申し訳ございませんが、どなたかご教示をお願いします。
■要件
曖昧検索をして検索を行う。
例)漢字氏名が”林”で始まるお客様を一覧表示
■実現するためのSQL文
案1)select~ where 漢字氏名 like ’林%’;
案2)select~ where substr(漢字氏名,0,2)=’林’;
※漢字氏名の型はvarchar2です。
処理時間(oracleのコスト的には)どちらも変わりませんかね?
以上、宜しくお願いいたします
No.1ベストアンサー
- 回答日時:
漢字氏名列に索引がある場合、LIKE検索では、レンジスキャン可能です。
substrなど関数を介す場合は、一般的には索引を用いません。
ただし、substr関数を使うことが分かっている場合は、ファンクション索引を
使うことでファンクション索引に合致する検索であれば索引が利用できます。
仮に索引がない場合、LIKEでもsubtr関数でもフルスキャンですから、
substr関数のオーバーヘッド程度の違いしか生まれません。
索引の有無で変わってくるので、実際にどちらが効果的かは、実行計画を自ら比較してください。
No.2
- 回答日時:
私なら 漢字氏名にindex付けて like検索します。
検索文字数が 必ず全角1文字とかならいいですが「山田」「早乙女」等
長さが変わるでしょうし。
like検索ににしておけば業務アプリ側で制限さえかけなければ
'%太郎' '%純一% 等で後方一致・部分一致も簡単に実装できるかと
(フルスキャンしますが)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Excel(エクセル) マクロでボタンにつける名前がどこに設定されているかわからないケースがありました。 1 2023/06/19 19:37
- その他(法律) 昭和の役所に登録出来る氏名について 2 2022/08/17 23:31
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- MySQL 下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「名前(first name) 1 2023/06/24 13:03
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
Like文の速度について教えてください
Oracle
-
Viewにインデックスは張れますか?
Oracle
-
異なるスキーマからデータを抽出するには?oracl、PL/SQL
Oracle
-
-
4
LIKEの右側にカラムを指定できますか?
MySQL
-
5
selectした結果の余計な余白を取るにはどうしたらよいのでしょうか
Oracle
-
6
2つのテーブルをLIKE演算子のように結合させたい
その他(データベース)
-
7
含まない言い方ってどうしたらいいんでしょうか
日本語
-
8
ある条件の最大値+1を初番するにはロックが必要ですか?
MySQL
-
9
MAX関数を使ってからLEFT JOINしたいのですが・・
PHP
-
10
PL/SQLをWindowsのBATファイルで実行するには
Oracle
-
11
あいまい検索のパフォーマンス向上について
Oracle
-
12
batである文字列内に特定の文字列が含まれているか確認したい
その他(プログラミング・Web制作)
-
13
テーブル名をカラムとして取得する方法
Oracle
-
14
Eclipseで、プロジェクト名のところに赤いバッテンのエラーマークが
Java
-
15
CloseとDisposeの違い
Visual Basic(VBA)
-
16
Linux環境 grepで改行コード(CRLF、LF)を検索できないで
UNIX・Linux
-
17
【SQL】他テーブルに含まれる値に合致する行を抽出
その他(データベース)
-
18
バッチでテキストファイルから任意の行のみ取得したい
その他(プログラミング・Web制作)
-
19
【DB】同じトランザクション内でupdateとselectをしたときの結果値
その他(データベース)
-
20
javaで質問です。 文字列2023/2/3(一桁の場合、0埋めなし)の場合にyyyyMMddに変換
Java
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
キャッシュを使わずにSELECTを...
-
DATE型カラムのインデックスが...
-
likeとsubstrの使いわけについて
-
WHERE句の実行順序
-
WHERE句はJOIN結合前結合後どち...
-
Accessのマクロでモジュールを...
-
エクセルVBAでUserFormを起動し...
-
Access VBAで行ラベルが定義さ...
-
会社の〇〇部と〇〇課の違いっ...
-
エクセル 日付による並べ替え...
-
SQLサーバで和暦から西暦に変換...
-
SQLで部分的にGROUP BYしたいとき
-
百の位での四捨五入について
-
SQLserver算術オーバーフロ...
-
wordの差し込み印刷での日付表示
-
sqlplusのspoolで空白行出現
-
Accessの数値から時間に変換す...
-
全角空白のTRIMができない...
-
SQLite3のtext→date変換について
-
Statement ignored というエラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
キャッシュを使わずにSELECTを...
-
likeとsubstrの使いわけについて
-
WHERE句の実行順序
-
Like文の速度について教えてく...
-
WHERE句はJOIN結合前結合後どち...
-
ヒント句が無効になります
-
JOINの時のONとWHEREの違いにつ...
-
あいまい検索のパフォーマンス...
-
アナライズでほとんどの処理が...
-
SQL ORDER BYにおける条件について
-
800万件のテーブル読み込み...
-
問題解決のストーリーにて PDCA...
-
実行計画HASH JOIN RIGHT OUTER
-
oracleのanalyzeと処理時間につ...
-
PDCAを回すって?
-
【チューニング】インデックス...
-
Oracleで検索すると、フリーズ...
-
Oracle 実行計画、統計情報の見方
-
OEMで負荷の少ないSQLの実行計...
-
データ抽出の速度について
おすすめ情報