首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php + mysql插入多个具有增量ids和不同值的行

问php + mysql插入多个具有增量ids和不同值的行
EN

Stack Overflow用户
提问于 2011-12-15 01:06:58
回答 5查看 1.1K关注 0票数 2

我尝试对我的应用程序施加压力,看看mysql查询是否可以处理大量记录。

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

为了实现这一点,我将需要复制具有增量ids和不同值的行。

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

如何在mysql表中插入多个具有递增ids和不同值的行?可以是SQL样式,也可以是PHP代码,因为它可以被执行。

代码语言:javascript
复制
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');
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-12-15 01:12:40

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

我建议至少500k,否则你甚至不会感觉到没有索引的查询之类的东西。如果你只是在10k上测试它,所有的查询都会非常快(不管有没有索引)。

然后,您应该同时使用以下两种方法对站点进行压力测试:

Apache ab -它会将负载加载到您的服务器(和数据库)中

MysqlSlap -这将对数据库施加负载

如果您碰巧在执行任何单个查询时遇到问题,请看一下MySQL提供的EXPLAIN命令。它将精确地指出您的问题所在。

票数 2
EN

Stack Overflow用户

发布于 2011-12-15 01:19:19

正如OldCode101所暗示的,在插入时不需要包括"ID_Customer“字段。如果您将其排除,则auto_increment将生效,并且MySQL服务器负责分配一个新的唯一值。如果需要使用该值,可以使用PHP中的mysql_insert_id()函数。

这回答了“我如何使用auto_increment”的问题。

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

代码语言:javascript
复制
$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.

票数 1
EN

Stack Overflow用户

发布于 2011-12-15 01:10:34

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8508620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档