多数の行をクエリする場合の LIKE 演算子の代替手段は何ですか?
P粉191610580
2023-09-02 13:02:15
<p>次のようなランダムな文字列を格納する列を持つテーブルがあります。
<pre class="brush:php;toolbar:false;">example_id = qwhs77gt65g7*</pre>
<p>列の一部のデータにはアスタリスク (*) が付きますが、他のデータにはアスタリスク (*) が付きません。 </p>
<p>該当するものを選択する必要があります。私はこのクエリを使用しています: </p>
<pre class="brush:php;toolbar:false;">SELECT example_id FROM example_tbl WHERE example_id LIKE ‘%*%’</pre>
<p>これは通常は問題になりませんが、何百万行ものクエリを実行しているため、私の知る限りでは、LIKE 演算子がパフォーマンスに影響を与えています。クエリが完了するまでに数時間かかります</p>
<p>私の質問は、LIKE 演算子の代わりに何があるかということです。 </p>
<p>PS アスタリスクは常に文字列の最後にあります。役に立つかどうかわかりません</p>
「アスタリスクは常に最後にある」と述べたので、 を試してください。
ここで、example_id は '%*'のようになります。
これにより、「*」で終わる値が検索されます
######または######は、テーブルの列内の部分文字列を検索します。
これを実現する 1 つの方法は、3 つのパラメーターを取る instr() 関数を使用することです。
構文: instr(rank, string, sub_string)
######ランキング###:###String: 文字列はテキストです。
sub_string: 探している部分文字列 探している。 instr() が見つからない場合は 0 を返します。 マッチ。これをテーブルにどのように適用すればよいでしょうか? instr()関数はx3なので適用は簡単です。
注: Instr() 関数は大文字と小文字を区別するため、常に大文字または小文字の関数を使用してください。