ホームページ >バックエンド開発 >PHPチュートリアル >配列とプリペアドステートメントを使用して MySQL の「WHERE ... IN(...)」クエリを最適化するにはどうすればよいですか?

配列とプリペアドステートメントを使用して MySQL の「WHERE ... IN(...)」クエリを最適化するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-16 06:53:11722ブラウズ

How Can I Optimize MySQL

「WHERE ... IN(...)」クエリに対する MySQL プリペアド ステートメントでの配列の使用

データベース クエリで、IN を使用するステートメントは、データベースへの呼び出し数を減らすことでパフォーマンスを最適化できます。これは、大規模なデータセットを操作する場合に特に便利です。次のようなクエリを想像してください。

SELECT * FROM somewhere WHERE `id` IN(1,5,18,25) ORDER BY `name`;

$ids = array(1,5,18,25) など、取得する ID の配列がある場合は、プリペアド ステートメントの使用を検討するとよいでしょう。準備されたステートメントは SQL インジェクション攻撃を防止し、パフォーマンスを向上させます。単一の ID でプリペアド ステートメントを使用する例を次に示します。

$stmt = $mysqli->prepare('SELECT * FROM somewhere WHERE `id`=?;');
foreach ($ids as $id){
    $stmt->bind_params('i', $id);
    $stmt->exec();
}

ただし、このアプローチでは、結果を手動で並べ替える必要があります。代わりに、プレースホルダー (?) を含む文字列を作成し、implode() 関数を使用してそれらをカンマで区切ることにより、より効率的な代替手段を使用できます。

$clause = implode(',', array_fill(0, count($ids), '?'));

次に、句を含むステートメントを準備してバインドします。 call_user_func_array() を使用した $ids 配列。

$stmt = $mysqli->prepare('SELECT * FROM somewhere WHERE `id` IN (' . $clause . ') ORDER BY `name`;');
call_user_func_array(array($stmt, 'bind_param'), $ids);
$stmt->execute();

このアプローチにより、MySQL はソートを効率的に処理できるようになり、時間を節約し、努力。

以上が配列とプリペアドステートメントを使用して MySQL の「WHERE ... IN(...)」クエリを最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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