Jump to content
  • 0

best practice по нагрузке


Yazon_Nile
 Share

Question

привет. Есть вопрос, который интересует, но пока нет опыта, чтобы однозначно на такой вопрос ответить.

связка php+mysql(pdo)

Задача - начисто проапдеитить 1000 или больше строк в какой-то таблице за раз. "начисто" - значит, что предыдущие данные нас не интересуют.

Строка имеет свой уникальный ключ.

 

Способы решения.

1 Цикл. В каждой итерации делать запрос на update.

for ($i = 0; $i < count($arr); $i++) {	$value = $arr[$i]['value'];	$id = $arr[$i]['id'];	$sth = $this->_db->prepare("UPDATE table                                    SET value=$value				    WHERE id=$id;");	$sth->execute();	$sth->fetch();}

2 Заводим строчную переменную. Цикл. В каждой итерации дописываем нашу переменную запросом. Т.е вконце строка будет иметь вид кучи независимых запросов, разделенных точкой с запятой.

$queryString = '';for ($i = 0; $i < count($arr); $i++) {	$value = $arr[$i][];        $id = $arr[$i];	$queryString .= "UPDATE table SET value=$value WHERE id=$id;";}$sth = $this->_db->prepare($queryString);$sth->execute();$sth->fetch();

3 Цикл. В каждой итерации удалять строку из таблицы и формировать insert запрос, который запустить после того, как отработает цикл.

$queryString = "INSERT INTO table (id, value) VALUES ";for ($i = 0; $i < count($arr); $i++) {	$value = $arr[$i]['value'];	$id = $arr[$i]['id'];	$sth = $this->_db->prepare("DELETE FROM table				    WHERE id=$id;");	$sth->execute();	$sth->fetch();	$queryString .= "($id, $value),";}$queryString = substr($queryString, 0, strlen($queryString)-1) . ";";$sth = $this->_db->prepare("$queryString");$sth->execute();$sth->fetch();

Третий вариант можно также модифицировать, не выполняя делит запрос каждый раз, а тоже сохранять его в переменную и выполнить потом все одним скопом. 

Какой из представленных способов отработает быстрее остальных?
Может есть ещё способы?
Спасибо за помощь.

Edited by Yazon_Nile
Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 0

Да в общем-то для 1000 записей по первичному ключу без разницы первый или второй. Третий вариант кажется бредовым. Вы только посмотрите как правильно используются prepared statements, а то у вас как-то всё фигово сделано.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy