大家一起来做个测试,与MySQL数据库速速息息相关的!看看MySQL是不是有传说中的那么快! 先问一下,该把PHP的最大执行时间设置为多少秒?我刚才设置为300秒都要超时。我是指插入500000条记录,用的是你前面一个贴子里面的完整PHP代码。然后那个表好像就锁住了,drop都drop不掉。呵呵。我的FreeBSD机器P133/32M RAM。很差的。不过也想试试看。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 for ($i=0; $i<50000; $i++) {}光执行这条语句花费的时间为:0.20638692379 select * from list ORDER BY id DESC LIMIT 49990,10要: 4.3428260088 to swexplorer():时间设置为0,就是无限,drop不掉就重启mysql服务器 我的机器:赛杨655内存256insert用了36.2026950120926秒select用了1.1489770412445秒也够慢的了。[email protected] 优化insert插入一条记录的是由以下构成:a:连接(3)b:发送查询给服务器(2)c:分析查询(2)d:插入记录(1*记录大小)e:插入索引(1*索引)f:关闭(1)以上数字可以看成和总时间成比例改善插入速度的一些方法:6.1:如果同时从一个连接插入许多行,使用多个值的insert,这比用多个语句要快6.2:如果从不同连接插入很多行,使用insert delayed语句速度更快6.3: 用myisam,如果在表中没有删除的行,能在select:s正在运行的同时插入行6.4: 当从一个文本文件装载一个表时,用load data infile.这个通常比insert快20倍6.5:可以锁定表然后插入--主要的速度差别是在所有insert语句完成后,索引缓冲区仅被存入到硬盘一次.一般与有不同的insert语句那样多次存入要快.如果能用一个单个语句插入所有的行,锁定就不需要.锁定也降低连接的整体时间.但是对某些线程最大等待时间将上升.例如:thread 1 does 1000 insertsthread 2,3 and 4 does 1 insert thread 5 does 1000 inserts如果不使用锁定,2,3,4将在1和5之前完成.如果使用锁定,2,3,4,将可能在1和5之后完成.但是整体时间应该快40%.因为insert,update,delete操作在mysql中是很快的,通过为多于大约5次连续不断的插入或更新一行的东西加锁,将获得更好的整体性能.如果做很多一行的插入,可以做一个lock tables,偶尔随后做一个unlock tables(大约每1000行)以允许另外的线程存取表.这仍然将导致获得好的性能.load data infile对装载数据仍然是很快的.为了对load data infile和insert得到一些更快的速度,扩大关键字缓冲区.以上的一些建议是我的一篇拙作http://www.csdn.net/develop/read_article.asp?id=15093浅妄薄见,望与斟酌 这篇文章中的一些关于缓冲区的论述是我从mysql.org翻译的----所以可能有些地方不是很正确 所以,你要这样插入50万的信息,如果用load data会快很多,建议试试 Shakespeare(网络骑士):那么读取的速度呢,你有没有什么办法提高呢? 读取?是select?还是文件的load data?如果是select那么,主要有两种情况:1:选取列这一般没有什么好说的。因为mysql的数据库一般是巨量的简单记录。不象应用于银行,建筑那样,字段(列)非常的多,所以这个一般不会产生多大的影响2:选取记录(主要优化where,limit,left join子句等)(我那篇文章里有一些,不过可能不全,欢迎大家补全啊^-^)如果是用load子句,可以用外部的处理较快的工具来生成这个文件,比如说c语言浅妄薄见,望与斟酌 这样子循环是很慢的,不信你可以循环50万次,每次输出i值到浏览器就知道有多慢了,它要占用掉大量的系统资源,因此在我们的pc上简直是无法忍受的并发能力呢?有否测过呀? 我正在做的一个项目:硬件:IBM E SERVERP4 1.6G512M72G (RAID0)MYSQL用的配置文件是HUGE ,最多占用内存256M数据库中有4千万条纪录,做了索引!查询带条件的东西,极其慢!MYSQL在做小型应用时很快。但是数据大了救极其慢! 另外,插入时LOCK TABLE了!插入也是极其慢! 内容已被编辑! gawk的运算在php里面怎么不工作了 PHP设置时为何老提示“服务未启动”?? 一个简单的正则表达式问题 PHP6.0 很多函数不再向下兼容了? php如何调用webservice接口? 正则表达式 提取 标签内 内容(看到正则表达式就头晕~) 新手问题,表单 急!!!!session求助! 请教关于popen执行后台命令的问题 请教foreach()读取数组的问题 請教一個文本處理的問題
}
光执行这条语句花费的时间为:0.20638692379
要: 4.3428260088
时间设置为0,就是无限,drop不掉就重启mysql服务器
赛杨655
内存256insert用了36.2026950120926秒
select用了1.1489770412445秒也够慢的了。
[email protected]
插入一条记录的是由以下构成:
a:连接(3)
b:发送查询给服务器(2)
c:分析查询(2)
d:插入记录(1*记录大小)
e:插入索引(1*索引)
f:关闭(1)
以上数字可以看成和总时间成比例
改善插入速度的一些方法:
6.1:如果同时从一个连接插入许多行,使用多个值的insert,这比用多个语句要快
6.2:如果从不同连接插入很多行,使用insert delayed语句速度更快
6.3: 用myisam,如果在表中没有删除的行,能在select:s正在运行的同时插入行
6.4: 当从一个文本文件装载一个表时,用load data infile.这个通常比insert快20倍
6.5:可以锁定表然后插入--主要的速度差别是在所有insert语句完成后,索引缓冲区仅被存入到硬盘一次.一般与有不同的insert语句那样多次存入要快.如果能用一个单个语句插入所有的行,锁定就不需要.锁定也降低连接的整体时间.但是对某些线程最大等待时间将上升.例如:
thread 1 does 1000 inserts
thread 2,3 and 4 does 1 insert
thread 5 does 1000 inserts
如果不使用锁定,2,3,4将在1和5之前完成.如果使用锁定,2,3,4,将可能在1和5之后完成.但是整体时间应该快40%.因为insert,update,delete操作在mysql中是很快的,通过为多于大约5次连续不断的插入或更新一行的东西加锁,将获得更好的整体性能.如果做很多一行的插入,可以做一个lock tables,偶尔随后做一个unlock tables(大约每1000行)以允许另外的线程存取表.这仍然将导致获得好的性能.load data infile对装载数据仍然是很快的.
为了对load data infile和insert得到一些更快的速度,扩大关键字缓冲区.
以上的一些建议是我的一篇拙作
http://www.csdn.net/develop/read_article.asp?id=15093
浅妄薄见,望与斟酌
那么读取的速度呢,你有没有什么办法提高呢?
是select?还是文件的load data?
如果是select那么,主要有两种情况:
1:选取列这一般没有什么好说的。因为mysql的数据库一般是巨量的简单记录。不象应用于银行,建筑那样,字段(列)非常的多,所以这个一般不会产生多大的影响
2:选取记录(主要优化where,limit,left join子句等)(我那篇文章里有一些,不过可能不全,欢迎大家补全啊^-^)如果是用load子句,可以用外部的处理较快的工具来生成这个文件,比如说c语言浅妄薄见,望与斟酌
P4 1.6G
512M
72G (RAID0)MYSQL用的配置文件是HUGE ,最多占用内存256M
数据库中有4千万条纪录,做了索引!查询带条件的东西,极其慢!MYSQL在做
小型应用时很快。但是数据大了救极其慢!