1

多くの User 値 (電話番号、設定、連絡先情報など) をテーブルに格納している、このタイプの User テーブル構造を考えると、次のようになります。

Table: User ID | Key | Value

$values = [
    1 => 'A value for key 1',
    2 => 'Hello',
    8 => 'Meow',
]

// Update values
$stmt = $pdo_db->prepare('
    INSERT INTO table (UID, KEY, VALUE)
    VALUES            (:UID, :KEY, :VALUE)
    ON DUPLICATE KEY UPDATE VALUE = :VALUE');

foreach ($values as $key => $value) {
    $stmt->bindParam(':KEY', $key);
    $stmt->bindParam(':VALUE', $value);
    $stmt->execute();
}

150 の異なるペアがある場合、更新ごとに 150 のクエリになります。このコードを最適化するにはどうすればよいですか? 巨大な SQL を作成すると、mysql 側の作業が楽になりますか? 構造自体の変更を検討する必要がありますか?

4

1 に答える 1

2

このクエリをガイドとして使用してください-

INSERT INTO example
  (example_id, name, value, other_value)
VALUES
  (100, 'Name 1', 'Value 1', 'Other 1'),
  (101, 'Name 2', 'Value 2', 'Other 2'),
  (102, 'Name 3', 'Value 3', 'Other 3'),
  (103, 'Name 4', 'Value 4', 'Other 4');

一度に複数のレコードを挿入できます。

どのレコードが新しいかがわかっている場合は、それらをプレーンに分離するためにスピードアップする可能性がありますINSERT-mysqlは、そうでない場合の調整に余分な時間を費やす必要がありON DUPLICATE... UPDATEます。

また、使用することUPDATEREPLACE、更新するだけの場合も検討してください。

于 2012-09-04T01:14:48.123 に答える