PHP + mysql插入许多行与增量id和不同的值


php + mysql to insert many rows with incremental ids and different values

我正试图强调我的应用程序,看看mysql查询是否适合大量记录。

与许多开发人员一样,我编写了具有小范围记录的PHP/MySQL应用程序,并在开发阶段添加了一些记录。现在,我想知道如何工作(慢,正常或快速),如果我将有10000或50000行在我的表。当然,所有数据都在许多表中(客户、联系人、订单、产品、购物车等)

要实现这一点,我需要用增量id和不同的值复制行。

现在,我知道这是不可能要求为所有的表或数据库结构编写查询,所以,我的问题是:

我如何插入到一个mysql表多行与增量id和不同的值?可以是SQL风格,也可以是PHP代码,只要它可以执行。

CREATE TABLE `customers` (
  `ID_Customer` int(11) unsigned NOT NULL auto_increment,
  `Name` varchar(50) character set latin1 default NULL,
  `Address` varchar(100) character set latin1 default NULL,
  `City` varchar(50) character set latin1 default NULL,
  `Zip` varchar(15) character set latin1 default NULL,
  `ID_Country_Subdivision_ISO_Code` char(3) character set latin1 default NULL,
  `ID_Country_ISO_Code` char(2) character set latin1 default NULL,
  PRIMARY KEY  (`ID_Customer`)
) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

INSERT INTO `customers` VALUES ('9', 'Bernard Dusablon', '8-125 103 E Avenue', 'St-Jérôme', 'J7Y 3Z6', 'QC', 'CA');
INSERT INTO `customers` VALUES ('10', 'Nicolas Gilbert', '9-125 103 E Avenue', 'Montréal', 'H7C 1T5', 'QC', 'CA');

查看Generate Data,从那里生成至少500k行结果并将它们插入到您的数据库中。

我建议至少500k,因为少于500k,你甚至不能感觉到没有索引的查询和类似的东西。如果你只是在10k上测试它,所有的查询都将是闪电般的快(无论是否索引)。

你应该使用这两种方法对你的网站进行压力测试:

Apache ab -这将把加载到您的服务器(和db)
MysqlSlap -将加载到数据库

如果您碰巧在任何单个查询中遇到问题,请查看MySQL的EXPLAIN命令。

正如OldCode101所暗示的那样,在插入时不需要包含"ID_Customer"字段。如果你排除它,那么auto_increment生效,MySQL服务器负责分配一个新的,唯一的值。如果需要使用该值,可以使用PHP中的mysql_insert_id()函数。

回答了"我如何使用auto_increment"的问题。

要用多行对数据库进行压力测试,您应该找出一个您认为可能经常执行的查询,然后对数据库中不同行数的查询进行计时。

$q_insert = "INSERT INTO customers (Name, Zip) VALUES ('%s', '%s')";
$q_test = "SELECT COUNT(*) FROM customers WHERE ZIP LIKE '%s')";
$i = 0;
while ($i++ < 10) {
  $n = 0;
  for ($n=0; $n<10000; $n++) {
    $randomname = substr(md5(time()),0,rand(5,10)) ." ". substr(md5(time()),10,rand(5,10));
    mysql_query(sprintf($q_insert, $randomname, rand(10000,99999)));
  }
  $starttime=microtime(1);
  mysql_query(sprintf($q_test, rand(1,9)));
  printf("i=%s, duration=%.4f s'n", $i, microtime(1)-$starttime);
}

测试。YMMV .

只需编写一个随机生成器PHP脚本来触发插入语句。不要在insert中包含ID_CUSTOMER字段,SQL Server会处理的。

试试在PHP

$max_stress_test = 100;
for(i=0;i<=$max_stress_test;i++)
{
  $query = 'INSERT INTO `customers` (Name, Address, Zip, ID_Country_Subdivision_ISO_Code, ID_Country_ISO_Code) VALUES ('Bernard Dusablon', '8-125 103 E Avenue', 'St-Jérôme', 'J7Y 3Z6', 'QC', 'CA');'
  $result = mysql_query( $query ) or die( mysql_error() );
}

它将循环并向表中添加行,直到行数达到100。ID_Customer将自动上升。

您还可以在SQL中创建如下的简单函数

创建函数

创建一个for循环,使用随机值。

这个链接将解释SQL RAND()的使用

我想这肯定会有帮助…!