У меня есть около 2000-3000 записей, которые мне нужно хранить внутри базы данных mysql, и я использую php. Я использую подготовленные инструкции для этого, но по сравнению с обычными запросами скорость падает до 1/3 того, что было!Медленные подготовленные операторы с использованием php mysqli
PHP, показывающий, что я использую их ниже.
$connection = ...; // a mysqli object
$tile;
$xPos;
$yPos;
$isPass; //variables used in the prep statement.
$insertPrepS = $connection->prepare("INSERT INTO `foo`.`tiles`(MapId,XPos,YPos,Passable) VALUES(?,?,?,?)");
$insertPrepS->bind_param("iiii",$mapId,$xPos,$yPos,$isPass); //$mapId was set up earlier in the code.
$map = new Map(50,50); //has w and h and an array of Tile objects inside.
$map->generateMap(); //sets up the array of Tile objects inside the map
for($y = 0; $y < $map->h; $y++){
for($x = 0; $x < $map->w; $x++){
$tile = $map->getTile(0,0);
$xPos = $tile->x;
$yPos = $tile->y;
$isPass = $tile->passable?1:0;
$insertPrepS->execute();
}
}
таблицы «плитки» имеет два индекса, первичный ключ (автоинкрементируемые, поэтому оставил здесь) и внешний ключ «МАПИД», значение которого я объявленный и определенное ранее в программе.
Является ли мое использование подготовленных заявлений здесь правильным? Почему он работает намного медленнее, чем без них, и что я могу сделать, чтобы увеличить скорость вставки записей помимо этого?
Удивительные улучшения используя транзакции! Спасибо! –