|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
MySQL对硬件的较低要求是其最大的优势之一,不过需要注意的是:内存越多越好,因为所有的重要数据存储都在内存中完成。MySQL的功能调剂:<Pstyle="TEXT-INDENT:2em">INSERT查询的速率:<Pstyle="TEXT-INDENT:2em">拔出一个纪录的工夫由以下构成:<Pstyle="TEXT-INDENT:2em">毗连:(3)<Pstyle="TEXT-INDENT:2em">发送查询给服务器:(2)<Pstyle="TEXT-INDENT:2em">剖析查询:(2)<Pstyle="TEXT-INDENT:2em">拔出纪录:(1x纪录巨细)<Pstyle="TEXT-INDENT:2em">拔出索引:(1x索引)<Pstyle="TEXT-INDENT:2em">封闭:(1)<Pstyle="TEXT-INDENT:2em">这里的数字有点与整体工夫成反比。这不思索翻开表的初始开支(它为每一个并发运转的查询做一次)。<Pstyle="TEXT-INDENT:2em">表的巨细以NlogN(B树)的速率减慢索引的拔出。<Pstyle="TEXT-INDENT:2em">加速拔出的一些办法:<Pstyle="TEXT-INDENT:2em">假如你同时从统一客户拔出良多行,利用多个值表的INSERT语句。这比利用分隔INSERT语句快(在一些情形中几倍)。<Pstyle="TEXT-INDENT:2em">假如你从分歧客户拔出良多行,你能经由过程利用INSERTDELAYED语句失掉更高的速率。<Pstyle="TEXT-INDENT:2em">注重,用MyISAM,假如在表中没有删除的行,能在SELECT:s正在运转的同时拔出行。<Pstyle="TEXT-INDENT:2em">当从一个文本文件装载一个表时,利用LOADDATAINFILE。这一般比利用良多INSERT语句快20倍。当表有良多索引时,有大概多做些事情使得LOADDATAINFILE更快些。利用以下历程:<Pstyle="TEXT-INDENT:2em">有选择地用CREATETABLE创立表。比方利用mysql或Perl-DBI。<Pstyle="TEXT-INDENT:2em">实行FLUSHTABLES,或外壳命令mysqladminflush-tables。<Pstyle="TEXT-INDENT:2em">利用myisamchk--keys-used=0-rq/path/to/db/tbl_name。这将从表中删除一切索引的利用。<Pstyle="TEXT-INDENT:2em">用LOADDATAINFILE把数据拔出到表中,这将不更新任何索引,因而很快。<Pstyle="TEXT-INDENT:2em">假如你有myisampack而且想要紧缩表,在它下面运转myisampack.<Pstyle="TEXT-INDENT:2em">用myisamchk-r-q/path/to/db/tbl_name再创立索引。这将在将它写进磁盘前在内存中创立索引树,而且它更快,由于制止大批磁盘寻道。了局索引树也被完善地均衡。<Pstyle="TEXT-INDENT:2em">实行FLUSHTABLES,或外壳命令mysqladminflush-tables。<Pstyle="TEXT-INDENT:2em">这个历程将被机关进在MySQL的某个将来版本的LOADDATAINFILE。<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">你能够锁定你的表以减速拔出。<Pstyle="TEXT-INDENT:2em">mysql>LOCKTABLESaWRITE;mysql>INSERTINTOaVALUES(1,23),(2,34),(4,33);mysql>INSERTINTOaVALUES(8,26),(6,29);mysql>UNLOCKTABLES;次要的速率不同是索引缓冲区仅被洗濯到磁盘上一次,在一切INSERT语句完成后。一样平常有与有分歧的INSERT语句那样夺的索引缓冲区洗濯。假如你能用一个单个语句拔出一切的行,锁定就不必要。锁定也将下降多毗连测试的全体工夫,可是对某些线程最年夜守候工夫将上升(由于他们守候锁)。比方:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">thread1does1000insertsthread2,3,and4does1insertthread5does1000inserts假如你不利用锁定,2、3和4将在1和5前完成。假如你利用锁定,2、3和4将大概不在1或5前完成,可是全体工夫应当快约莫40%。由于INSERT,UPDATE和DELETE操纵在MySQL中是很快的,经由过程为多于约莫5次接二连三地拔出或更新一行的器材加锁,你将取得更好的全体功能。假如你做良多一行的拔出,你能够做一个LOCKTABLES,偶然随后做一个UNLOCKTABLES(约莫每1000行)以同意别的的线程存取表。这仍旧将招致取得好的功能。固然,LOADDATAINFILE对装载数据仍旧是更快的。
需要处理因此带来的更多的支持工作,这有可能会带来成本上的提高。在这种情况下,一些MySQL学习教程发行商可能倾向于选择别的开源数据库,例如遵循BSD授权的PostgreSQL。 |
|