MySQL FIND_IN_SET はインデックスを利用できますか?
データベース最適化の領域では、インデックスはクエリのパフォーマンスを向上させる上で重要な役割を果たします。ただし、コンマ区切り文字列内の値の検索に一般的に使用される関数 FIND_IN_SET は、インデックスの使用をバイパスし、パフォーマンスが低下することが知られています。
文字列パラメータを使用したインデックス付きクエリの実現
認識されている制限にもかかわらず、カンマ区切りの文字列を扱う場合でもインデックス付きクエリを実現することは可能です。文字列をパラメーターとして受け入れるプリペアド ステートメントを利用することで、インデックスを動的に利用してクエリの効率を向上させることができます。
プリペアド ステートメントの作成
CREATE PROCEDURE my_procedure(IN csv_str VARCHAR(255)) BEGIN SET @csv_list = CONCAT('(', csv_str, ')'); SELECT * FROM users WHERE id IN @csv_list; END
このストアド プロシージャでは、入力パラメータ csv_str は、カンマ区切り文字列のソースとして機能します。連結を使用して IN 句を動的に構築し、それをセッション変数 @csv_list に割り当てます。
準備されたステートメントの実行
特定のカンマを使用して準備されたステートメントを実行するには、文字列を区切る場合は、次の構文を使用します。
CALL my_procedure('1,2,3');
クエリの最適化
プリペアド ステートメントが実行されると、オプティマイザーがトリガーされてクエリが分析され、クエリが利用されます。 id 列のインデックス。このインデックスの使用法は EXPLAIN 出力で明らかであり、クエリの効率的な実行が保証されます。
結論
FIND_IN_SET 単独では本質的にインデックスを使用せず、文字列を含むプリペアド ステートメントを使用します。パラメータを使用すると、インデックス付きクエリを実現できます。この手法により、FIND_IN_SET に関連するパフォーマンス上の欠点が回避され、最適なクエリ実行時間が実現します。
以上がMySQL FIND_IN_SET はプリペアド ステートメントでインデックスを利用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。