我尝试对我的应用程序施加压力,看看mysql查询是否可以处理大量记录。
和许多开发人员一样,我编写的PHP/MySQL应用程序只有一小部分记录,并在开发阶段添加了几条记录。现在,我想知道如果我的表中有10000或50000行,我将如何工作(慢,正常或快)。当然,所有数据都在许多表中(客户、联系人、订单、产品、购物车等)
为了实现这一点,我将需要复制具有增量ids和不同值的行。
现在,我知道不可能要求为我所有的表或数据库结构编写查询,所以我的问题是:
如何在mysql表中插入多个具有递增ids和不同值的行?可以是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');发布于 2011-12-15 01:12:40
发布于 2011-12-15 01:19:19
正如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.
发布于 2011-12-15 01:10:34
只需编写一个随机数发生器PHP脚本来触发insert语句即可。不要在插入中包含ID_CUSTOMER字段,SQL Server会处理这一点的。
https://stackoverflow.com/questions/8508620
复制相似问题