SQL - 验证现有数据

时间:2016-09-02 23:19:16

标签: php mysql sql database

我有一个脚本总是验证该行是否存在,具体取决于对事件的调整。

例如:

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)))
    ); 

我将尝试运行轻快的服务器,然后触摸。

2 个答案:

答案 0 :(得分:2)

确保列uuid具有唯一索引,您可以执行以下查询

INSERT INTO table (a,b) VALUES (1,2)
   ON DUPLICATE KEY UPDATE b=4;

答案 1 :(得分:0)

这样的事情:

int