MySQL FIND_IN_SET または同等のものはインデックスを利用できますか?
クエリ SELECT * FROM Foo WHERE FIND_IN_SET(id, '2,3')主キーインデックスは利用されません。これは、EXPLAIN 出力を、インデックスを使用する SELECT * FROM Foo WHERE id IN (2,3) の出力と比較すると明らかです。
目的: 動作するストアド プロシージャを構築します。 2 番目のクエリと同様に、 ID。
解決策:
パラメータとして文字列を受け入れる準備済みステートメントを作成します。
CREATE PROCEDURE my_sp(@id_string NCHAR(1000))
その後、準備済みステートメントを実行できます。カンマ区切りの文字列を引数として使用します:
EXEC my_sp '2,3'
このアプローチでは、次の望ましい条件:
これらの条件は、インデックスが使用されていることを示します。
セキュリティ考慮事項:
プリペアド ステートメントは SQL インジェクション攻撃のリスクを軽減します。ただし、第 2 レベルの SQL インジェクション攻撃を防ぐために、ユーザーが指定したデータが確実にサニタイズされていることは依然として重要です。
以上がMySQL の FIND_IN_SET または同等の関数はインデックスを利用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。