HSツールボックス

MySQLの文字列関数FIND_IN_SET詳細解説

🏷️ 記事タグ: MySQL, FIND_IN_SETです
👁️‍🗨️ 447 🕒 2024-12-30 09:53:22

FIND_IN_SETは、コンマで区切られた文字列のリスト内で文字列の位置を探すためのMySQLの文字列関数です。見つけた文字列の位置を表す整数を返し(1からカウント)、文字列がリスト内にない場合は0を返します。この関数はコンマ区切り文字列として格納されたフィールドを扱うときによく使われますが、このような設計はあまり推奨されていません(より良い方法は、多対多の関係テーブルを作成するなど、関係データベースの利点を利用することです)。


文法です

FIND_IN_SET(str, strlist)です

str:検索したい文字列です

strlist:コンマで区切られた複数の文字列を含むリストです。


例です

userというテーブルがあり、そこにhobbiesの列が入っているとします。これは、ユーザーの嗜好をコンマで区切ったものです。

SELECT * FROM users WHERE FIND_IN_SET('eat', hobbies) > 0;


注意事項です

パフォーマンス:FIND_IN_SETを使用すると、大量のデータセット上でプログレッシブ走査を行い、コンマ区切り文字列を解析する必要があるため、パフォーマンスに問題が生じる可能性があります。

インデックス:FIND_IN_SETはインデックスには使えません。これはクエリがインデックスを利用してデータ検索を高速化できないことを意味します。

データの正規化:より良い方法は、このような多値フィールドを正規化することです。例えば、user_idとhobbyフィールドを含む新しいuser_hobbiesテーブルを作成することで、各ユーザーの好みが1行に含まれます。これにより、標準的なSQLリンクを使用することができ、インデックスを利用してクエリ性能を向上させることができます。

一般的に、FIND_IN_SETはいくつかのケースで有用ですが、データベースを設計する際にコンマ区切りの文字列を使って複数の値を格納するのは避け、より正規化された方法を採用したほうがよいでしょう。


すべてのツール
友達リンク

© CopyRight 2018-2025, Tool.hadsky.com

陕ICP备13005805号

スキャン

OR