sql >> データベース >  >> RDS >> Mysql

PDOと挿入中の複数の値セットのバインド-最近

    理論的には、MySQLサーバーへの複数の呼び出しを回避するため、単一のステートメントの方が効率的であるように聞こえるかもしれませんが、実際には、これはマイクロ最適化であり、コードを複雑にしすぎてほとんどメリットがありません。

    プリペアドステートメントの優れている点は、1回準備され、複数回実行できることです。これにより、SQLステートメントを複数回解析する手間が省けます。ループの外側でステートメントを準備し、ループの内側で実行するだけです。

    $names = [['Joe', 'Smith'], ['Fred', 'Sampson'], ['Lisa', 'Pearce']];
    $stmt = $pdo->prepare('INSERT INTO table (firstName, lastName) VALUES(?,?)');
    foreach ($names as $name) {
        $stmt->execute($name);
    }
    

    あなたの常識がコメントで示唆したように、トランザクションですべてをラップする場合、1つの大きなステートメントと比較してパフォーマンスに目立った違いはありません。

    $names = [['Joe', 'Smith'], ['Fred', 'Sampson'], ['Lisa', 'Pearce']];
    $stmt = $pdo->prepare('INSERT INTO people (firstName, lastName) VALUES(?,?)');
    $pdo->beginTransaction();
    foreach ($names as $name) {
        $stmt->execute($name);
    }
    $pdo->commit();
    


    1. psql(PostgreSQL)でクエリを実行するときにNull値を表示する方法

    2. 初心者のためのSQLリファレンス

    3. SQLAlchemyを使用したOracleデータベースへの接続

    4. SQL Server 2014:ネイティブバックアップ暗号化