鉴于此类用户表结构,您在表中存储了许多用户值(例如电话号码,首选项,联系信息):
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方面的工作变得更容易吗?我应该考虑改变结构本身吗?
答案 0 :(得分: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
。
如果您只是更新,请考虑使用UPDATE
或REPLACE
。