2013-06-28 2 views
-1

Я только что перенесла свой код с mysql_* до PDO и удивился, увидев огромный удар производительности. Я читал http://wooptoo.com/blog/pdo-vs-mysqli-performance-comparison/ и думал, что PDO будет более эффективным.производительность с PDO по сравнению с mysql

Но я думаю, что я могу сделать что-то неправильно, что делает мой код намного медленнее, чем ожидалось.

я создал класс singleton

class db 
     { 

     static $dbinstance=null; 

     public static function getinstance() 
     { 

     if (!self::$dbinstance) 
     { 
      try 
      { 
      self::$dbinstance=new PDO("mysql:host=127.0.0.1;dbname=inventory",'user','pass'); 
      self::$dbinstance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

      } 
      catch(PDOException $e) 
      { 
      die('<b>Errors:</b> '.$e->getMessage()); 
      } 
     } 
      return self::$dbinstance; 
    } 

Ниже код, я использую для вставки (я истребил код короткий для простоты)

if(isset($_POST['Build'])) 
{ 
    $InCart=db::getinstance()->prepare("SELECT `Vendor`, `ItemType`, `ItemCode`, `ItemDesc`, `SerialNo`, `Asset_Code`, `ItmUnit`, `Qty`,`SiteId`, `id`, `Ownership`, `wh`, `Phase`, `Category`, `Issue_Vendor`, `AssetName`, `po`, `FaultInfo`, `willreturn`, `Person`, `remarks`, `grnno`,stockid FROM temptable WHERE id=?"); 

    $insertinSIR=db::getinstance()->prepare("INSERT INTO Sir(SirNo,SiteId,Vendor,Type,ItemDesc,ItemCode,SerialNo,Unit,AssetCode,Qty,Region,Phase,Category,Issue_vendor,AssetName,ownership,Dated,PersonName,Remarks,po,invuser,grnno,WarehouseType,WarehouseLocation) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,NOW(),?,?,?,?,?,?,?)"); 

    foreach ($_POST['id'] as $id) 
     { 
    $InCart->execute(array($id)); 
    $arr=$InCart->fetch(PDO::FETCH_NUM); 

     $insertinSIR->execute(array($a,$arr[8],$arr[0],$arr[1],$arr[3],$arr[2],$arr[4],$arr[6],$arr[5],$arr[7],$user,$arr[12],$arr[13],$vendor,$arr[15],$arr[10],$person,$remarks,$arr[16],$invuser,$arr[21],$whtype,$whlocation)); 

     } 

Я бы признателен, если кто-то указать на производительность нападающего?
EDIT

Является ли это правильный путь, я готовлюсь заявления и выполнения в цикле?

+2

Определите, пожалуйста, «производительность» и «намного медленнее» в определенных количествах и запросах. Какой конкретный запрос работает «намного медленнее» и сколько времени он занимает? –

+0

У меня есть перенос всего моего кода на PDO, и он занимает 6X больше времени для завершения всего скрипта с теми же проверками, которые я делал с mysql_ * –

ответ

1

Предложение:

INSERT INTO Sir (SirNo, ...) 
    SELECT Vendor, ... 
     FROM temptable 
     WHERE id IN (?, ?, ...) 

Там нет необходимости трубы всех данных через PHP, чтобы начать с. См. http://dev.mysql.com/doc/refman/5.0/en/insert-select.html.

+0

В моем случае Это не поможет, так как после выбора из соблазнительного я должен выполнить некоторые проверки, а затем в зависимости от этих проверок будет обновляться или вставляться –