ホームページ  >  記事  >  データベース  >  MySQL の FIND_IN_SET または同等の関数はインデックスを利用できますか?

MySQL の FIND_IN_SET または同等の関数はインデックスを利用できますか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-05 21:22:02137ブラウズ

Can MySQL's FIND_IN_SET or an Equivalent Function Utilize Indices?

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'

このアプローチでは、次の望ましい条件:

  • type は range (not ALL)
  • key is not NULL

これらの条件は、インデックスが使用されていることを示します。

セキュリティ考慮事項:

プリペアド ステートメントは SQL インジェクション攻撃のリスクを軽減します。ただし、第 2 レベルの SQL インジェクション攻撃を防ぐために、ユーザーが指定したデータが確実にサニタイズされていることは依然として重要です。

以上がMySQL の FIND_IN_SET または同等の関数はインデックスを利用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。