MySQL SQL質問応答スレ [無断転載禁止]©2ch.net (148レス)
1-

94: 2022/09/26(月)17:31 ID:??? AAS
カツカレーだとライスにはマッチしないんだな
95
(2): 2022/09/26(月)17:42 ID:??? AAS
>>90
選択肢はブルートフォース、n-gram、 形態素解析、マッピングテーブルくらいかな
どれを選ぶかは用途次第

ブルートフォースは「カツカレー」というキーワードとテーブルの列名を1件1件比較して
キーワード内の部分文字列が列名に合致するかどうかを判断していく
めちゃ遅くなるけどデータ量と要求速度によってはこれでいい場合もある

n-gramで例えば文字単位で3文字ずつのまとまり(trigram)に分解すれば
「カツカレー」は「カツカ」「ツカレ」「カレー」の3つになる
この3つのキーワードともとの単語でテーブルを検索して合致するものがあるかどうか見る

形態素解析はそれ用のライブラリ使って
省4
96
(1): 2022/09/26(月)18:45 ID:CFgRtkvv(3/4) AAS
動的に列名違いのSQLを組み立てるなんてありえない。
97
(1): 2022/09/26(月)19:18 ID:??? AAS
>>95 >>96
SQLで出来ないことが分かっただけでも収穫ですが
さらに解決のヒントをいただきありがとうございます

ブルートフォースって言うのですか
PHPで作ってますがロジックで判断するやり方はちらっと頭に浮かんだのですが
性能がめちゃ心配で脳内却下してました
n-gramはちょっと分かりませんでした
形態素は解析エンジンを信用しきれなくて…
というわけで力作業でマッピングテーブルを作るか
それかブルートフォースでやるか
省1
98: 2022/09/26(月)19:38 ID:CFgRtkvv(4/4) AAS
やはり自作自演か
99
(1): 2022/09/26(月)22:34 ID:??? AAS
>>97
SQLでというか>>95の選択肢はどれもストアドやUDF使えばDB側でできるよ
特にブルートフォースでやるならDB側でやったほうが性能的には断然いい
100: 2022/09/26(月)22:48 ID:??? AAS
設計の最初からやり直した方が速そう
101
(1): 2022/09/27(火)19:57 ID:??? AAS
>>99
ストアドとかUDFとか知らなかった
教えてくれてありがとう
102: 2022/09/27(火)21:49 ID:qnEHOR6B(1) AAS
>>101
MySQLのストアドプロシージャは最悪の仕様だから覚悟しとけ!
103: 2022/09/29(木)00:05 ID:??? AAS
しらんけどこういう回答でどうなん?
104: 2022/09/29(木)00:10 ID:??? AAS
フライとかが登録されたTestというテーブル作っておいて

whereの中に "エビフライ" ライク コンキャット( パーセントフライパーセント)
みたいな値をかく。このエビフライっていうところが検索文字列ね
これでフライがとれるだろ?こういうことじゃないの?
105: 2022/09/29(木)00:10 ID:??? AAS
なおSQLで書こうとするとはじかれて書き込めなかった
わかりにくいがすまん
106: 2022/09/29(木)00:11 ID:??? AAS
考え方の質問なので、SQLで回答するのは難しい
107: 2022/09/29(木)00:13 ID:??? AAS
後半のパーセントで囲まれてるフライっていう文字列はテーブルのカラム名がそこにくる
108: 2022/09/29(木)00:23 ID:??? AAS
それに沿った書き方すれば、'エビフライ'という文字列が与えられていて
項目中に'エビフライ'の部分文字列にマッチするレコードを見つけるという問題
'エビフライ'のどこで区切るかは指定されていない
字句解析を行うか、ブルートフォースで行うか、だろうか
ストアドでやるとすれば、各レコードの項目文字列が'エビフライ'という文字列に
部分マッチングするか検査する感じかな
109: 2022/09/29(木)00:57 ID:??? AAS
104の方法がブルートフォースだよね
110
(1): 2023/01/30(月)21:25 ID:OB/pjXRI(1) AAS
ソースレビューにてDISTINCTは性能劣化するのでGROUP BYに変更しろと言われましたがDISTINCTよりGROUP BYのほうが性能あがるんですか?初心者ですみません。
111: 2023/01/30(月)22:21 ID:??? AAS
>>110
DISTINCTのほうが速いこともあればGROUP BYのほうが速いこともある
状況によるので実際のデータとクエリで実行計画の差と所要時間を計測して
112: 2023/02/01(水)00:16 ID:p28Z13TI(1) AAS
existsのほうが性能が高い可能性ありますか?3パターンを実測し1番性能が良いのを採用します。
113: 2023/02/19(日)12:11 ID:??? AAS
mysqldumpでエクスポートしたらインサート文のテーブル名がすべて空なんだけど原因わかる方教えてください。

mysqlのバージョン
Ver 8.0.32 for Linux on x86_64

コマンド
mysqldump -u {user} -p -h {host} --no-create-info --skip-extended-insert {dbname} {tablename} > export.sql

エクスポート結果
insert into `` (aaa ,bbb, ccc);
insert into `` (aaa ,bbb, ccc);
insert into `` (aaa ,bbb, ccc);
1-
あと 35 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.535s*