Mysql
 sql >> база данни >  >> RDS >> Mysql

PHP PDO вмъкване на множество (10000+) едни и същи реда с помощта на bindParam. Добра практика?

Не е необходимо да свързвате Param() по време на всяка итерация на цикъла. BindParam() кара променливите $v1, $v2 и т.н. да бъдат обвързани чрез препратка , така че всичко, което трябва да направите, е да промените стойностите на тези променливи и след това да изпълните отново заявката. Това може да намали режийните разходи.

Също така можете да избегнете извикването на intval() всеки път през цикъла. Просто се уверете, че $cloneCount е принуден до цяло число веднъж , преди цикъла. Това е много незначително подобрение, но е добра практика.

$cloneCount = (int) $cloneCount;

... 9 other bindParam
$insertG->bindParam(':v1', $v1, PDO::PARAM_STR);
$insertG->bindParam(':v2', $v2, PDO::PARAM_INT);

for ($i=0; $i < $cloneCount; $i++) 
{
  $v1 = /* something */
  $v2 = /* something */
  $insertG->execute();
}

Трябва също да избягвате автоматичното завършване. Намалете разходите за транзакциите на MySQL за изпълнение на оператор, като стартирате изрична транзакция , вмъкване на няколко хиляди реда и след това извършване на транзакцията.

Но най-добрият начин да ускорите груповото INSERT от хиляди подобни редове в една таблица е да използвате ЗАРЕЖДАНЕ НА ЛОКАЛЕН ИНФАЙЛ НА ДАННИ вместо INSERT. Това работи 10-20 пъти по-бързо от INSERT ред по ред, дори ако използвате параметри, транзакции, многоредово вмъкване и всеки друг трик, за който се сетите.

Дори ако трябва да използвате PHP, за да запишете данните си в .CSV файл на диска и след това да използвате LOAD DATA LOCAL INFILE върху този файл, пак е много по-бързо.

Вижте също Скорост на инструкциите INSERT в ръководството на MySQL за повече съвети.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MYSQL IN изявление

  2. MySQL Вмъкване в множество таблици? (Нормализация на базата данни?)

  3. Изявление за актуализиране на Python MYSQL

  4. Mysql Count(*) като Общо WHERE Общо?

  5. MySQL:Добавете колона за последователност въз основа на друго поле