สำหรับตัวอย่างจะใช้รูปแบบโค้ดของ Joomla โดยได้สร้างตารางแบบง่ายๆ เตรียมไว้แล้ว เก็บแค่ 2 ฟิลด์ คือ
id เก็บตัวเลขรันไปเรื่อยๆ
md5 เก็บข้อความ
การเขียน Insert ใน Joomla
โค้ด: เลือกทั้งหมด
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->insert('#__helloworld')->columns(array('md5'))->values($db->q(md5($i)));
$db->setQuery($query);
$db->execute();
โค้ด: เลือกทั้งหมด
INSERT INTO `ชื่อตาราง`(`id`, `name`) VALUES (1, 'test')
แล้วถ้าจะ Insert ข้อมูล 5 แถว
โค้ด: เลือกทั้งหมด
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->insert('#__helloworld')->columns(array('md5'));
for($i = 1; $i <= 5; $i++)
{
$query->values($db->q(md5($i)));
}
$db->setQuery($query);
$db->execute();
โค้ด: เลือกทั้งหมด
INSERT INTO `ชื่อตาราง`(`id`, `name`) VALUES (1,'test'),(2,'test'),(3,'test'),(4,'test'),(5,'test')
โค้ด: เลือกทั้งหมด
0.000 seconds (0.000); 8.45 MB (8.447) - Start Insert
0.054 seconds (0.054); 8.47 MB (0.019) - End Insert
ลอง Insert ข้อมูล 100000 แถว
โค้ด: เลือกทั้งหมด
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->insert('#__helloworld')->columns(array('md5'));
for($i = 1; $i <= 100000; $i++)
{
$query->values($db->q(md5($i)));
}
$db->setQuery($query);
$db->execute();
โค้ด: เลือกทั้งหมด
0.000 seconds (0.000); 8.45 MB (8.447) - Start Insert
Fatal error: Maximum execution time of 300 seconds exceeded in ...
หากจะแก้ไขปัญหาโดยไปแก้ไข config ให้ประมวลผลได้นานขึ้น มันไม่ใช่วิธีที่ดีเท่าไหร่
การแก้ไขปัญหาที่ดีกว่าไปแก้ไข config ก็คือการแบ่งการประมาลผลออกเป็นส่วนๆ
100000 แถว แบ่งเป็นครั้งละ 10000 แถว
โค้ด: เลือกทั้งหมด
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->insert('#__helloworld')->columns(array('md5'));
for($i = 1; $i <= 100000; $i++)
{
$query->values($db->q(md5($i)));
if(($i % 10000) == 0)
{
$db->setQuery($query);
$db->execute();
$query->clear()->insert('#__helloworld')->columns(array('md5'));
}
}
โค้ด: เลือกทั้งหมด
0.000 seconds (0.000); 8.44 MB (8.439) - Start Insert
36.799 seconds (36.799); 12.13 MB (3.692) - End Insert
โค้ด: เลือกทั้งหมด
0.000 seconds (0.000); 8.44 MB (8.439) - Start Insert
13.035 seconds (13.035); 13.60 MB (5.158) - End Insert