У меня есть скрипт, который всегда проверяет, существует или нет строка, в зависимости от настроек события.SQL - Проверка существующих данных
Например:
if(exists($row)){
// update
}else{
// insert
}
Вставить запрос:
INSERT INTO table (name, value) VALUES
('...', '1'),
('...', '2'),
('...', '3'),
('...', '4'),
('...', '5'),
//...100x
UPDATE QUERY:
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')
данных довольно много, и убедитесь, что запись существует достаточно долго. Потому что выполняет необходимые 500 или более раз.
Exists метод:
SELECT id FROM table WHERE uuid=Y;
Существует возможность как-то ускорить сценарий? Можно ли проверить существующие данные, добавленные непосредственно в запрос?
Можно ли задать только один запрос CREATE + UPDATE + CHECK SUISK?
Спасибо за помощь!
Updating and adding data with verification : 27-40 SEC
Updating and adding data WITHOUT verification: 1-5 SEC
EDIT: Я получаю данные с другого сервера, как 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)))
);
Я собираюсь попытаться запустить оживленный сервер, а затем коснуться.
грим вид таблицы с помощью выбора, а затем, если вы можете вставить. Принимаете ли вы данные вставки из самой базы данных или имеете локальные данные? – Motsim
Вставить игнорировать ... на дубликаты обновления? – Jakumi
вопрос был обновлен @Motsim –