我有一个脚本总是验证该行是否存在,具体取决于对事件的调整。
例如:
if(exists($row)){
// update
}else{
// insert
}
插入查询:
INSERT INTO table (name, value) VALUES
('...', '1'),
('...', '2'),
('...', '3'),
('...', '4'),
('...', '5'),
//...100x
更新查询:
UPDATE table
SET value = CASE uuid
WHEN 'x' THEN 1
WHEN 'y' THEN 2
END,
SET value1 = CASE uuid
WHEN 'x' THEN 1
WHEN 'y' THEN 2
END
WHERE uuid IN ('x','y')
数据非常多,并且验证记录存在的时间足够长。因为需要500x或更多。
存在方法:
SELECT id FROM table WHERE uuid=Y;
有可能以某种方式加速脚本?可以验证直接添加到查询中的现有数据吗?
我可以只有一个查询CREATE + UPDATE + CHECK EXISTING吗?
感谢您的帮助!
Updating and adding data with verification : 27-40 SEC
Updating and adding data WITHOUT verification: 1-5 SEC
编辑:我从其他服务器获取数据,例如json示例脚本:
$data = json_decode($_POST["data"]);
foreach($data as value){
// value is an array
if(exists($value["uuid"])){
$this->appendUpdate($value); // building the update query
}else{
$this->appendInsert($value); // building the insert query
}
}
$this->insert(); // for example: 30 inserts in 1 query
$this->update(); // for example: 500 updates in 1 query
在这个表中只有300-2000行(我不明白为什么需要这么长时间。)
EDIT2:
可能我的解决方案:
INSERT INTO test (uuid, value) VALUES
('aaa', 1),
('bbb', 2),
('ccc', 3)
ON DUPLICATE KEY UPDATE
value = (
IF(uuid='aaa', 4, IF(uuid='bbb', 5, IF(uuid='ccc', 6, value)))
);
我将尝试运行轻快的服务器,然后触摸。
答案 0 :(得分:2)
确保列uuid具有唯一索引,您可以执行以下查询
INSERT INTO table (a,b) VALUES (1,2)
ON DUPLICATE KEY UPDATE b=4;
答案 1 :(得分:0)
这样的事情:
int