MYSQL教程之让MYSQL无效地装载数据
对免费版的用户也具有充足的支持服务。在dev.mysql.com上,一个大型的MySQL学习教程强大社区用户和开发者可以讨论所有关于MySQL的事情。这个站点拥有博客、指南、视频、技术交流会、白皮书和论坛等方式的交流。4.4无效地装载数据
良多时分体贴的是优化SELECT查询,由于它们是最经常使用的查询,并且断定如何优化它们其实不老是刀切斧砍。绝对来讲,将数据装进数据库是刀切斧砍的。但是,也存在可用来改良数据装载操纵效力的战略,其基础道理以下:
■成批装载较单行装载更快,由于在装载每一个纪录后,不必要革新索引高速缓存;可在成批纪录装进后才革新。
■在表无索引古装载比索引后装载更快。假如有索引,不但必需增添纪录到数据文件,并且还要修正每一个索引以反应增添了的新纪录。
■较短的SQL语句对照长的SQL语句要快,由于它们触及服务器方的剖析较少,并且还由于将它们经由过程收集从客户机发送到服务器更快。这些要素中有一些仿佛微乎其微(出格是最初一个要素),但假如要装载大批的数据,即便是很小的要素也会发生很年夜的分歧了局。我们能够使用上述的一样平常道理推导出几个关于怎样最快地装载数据的实践结论:
■LOADDATA(包含其一切情势)比INSERT效力高,由于其成批装载行。索引革新较少,而且服务器只需剖析息争释一条语句而不是几条语句。
■LOADDATA比LOADDATALOCAL效力更高。使用LOADDATA,文件必需定位在服务器上,并且必需具有FILE权限,但服务器可从磁盘间接读取文件。使用LOADDATALOCAL,客户机读取文件并将其经由过程收集发送给服务器,如许做很慢。
■假如必需利用INSERT,应当使用同意在单个语句中指定多行的情势,比方:
可在语句中指定的行越多越好。如许会削减所需的语句数量,下降索引革新量。假如利用mysqldump天生数据库备份文件,应当利用--extended-insert选项,使转储文件包括多行INSERT语句。还可使用--opt(优化),它启用--extended-insert选项。
反之,应当制止利用mysqldump的--complete-insert选项;此选项会招致INSERT语句为单行,实行工夫更长,比不必--complete-insert选项天生的语句必要更多的剖析。
■利用紧缩了的客户机/服务器协定以削减收集数据流量。关于年夜多半MySQL客户机,能够用--compress命令行选项来指定。它一样平常只用于较慢的收集,由于紧缩必要占用大批的处置器工夫。
■让MySQL拔出缺省值;不要在INSERT语句中指定将以恣意体例付与缺省值的列。均匀来讲,如许做语句会更短,能削减经由过程收集传送给服务器的字符数。别的,语句包括的值较少,服务器所举行的剖析和转换就会较少。
■假如表是索引的,则可使用批量拔出(LOADDATA或多行的INSERT语句)来削减索引的开支。如许会最小化索引更新的影响,由于索引只必要在一切行处置过期才举行革新,而不是在每行处置后就革新。
■假如必要将大批数据装进一个新表,应当创立该表且在未索引古装载,装载数据后才创立索引,如许做较快。一次创立索引(而不是每行修正一次索引)较快。
■假如在装载之前删除或禁用索引,装进数据后再从头创立或启用索引大概使装载更快。假如想对数据装载利用删除或禁用战略,必定要做一些实行,看如许做是不是值得(假如将大批数据装进一个年夜表中,重修和索引所消费的工夫大概比装载数据的工夫还要长)。
可用DROPINDEX和CREATEINDEX来删除和重修索引。另外一种可供选择的办法是使用myisamchk或isamchk禁用和启用索引。这必要在MySQL服务器主机上有一个帐户,并对表文件有写进权。为了禁用表索引,可进进响应的数据库目次,实行以下命令之一:
对具有.MYI扩大名的索引文件的MyISAM表利用myisamchk,对具有.ISM扩大名的索引文件的ISAM表利用isamchk。在向表中装进数据后,按以下激活索引:
假如决意利用索引禁用和激活,应当利用第13章中先容的表修复锁定协定以制止服务器同时变动锁(固然此时不合错误表举行修复,但要对它像表修复历程一样举行修正,因而必要利用不异的锁定协定)。
上述数据装载道理也合用于与必要实行分歧操纵的客户机有关的流动查询。比方,一样平常但愿制止在频仍更新的表上长工夫运转SELECT查询。长工夫运转SELECT查询会发生大批争用,并下降写进程序的功能。一种大概的办理办法为,假如实行写进的次要是INSERT操
作,那末先将纪录存进一个一时表,然后按期地将这些纪录到场主表中。假如必要当即会见新纪录,这不是一个可行的办法。但只需能在一个较短的工夫内不会见它们,就能够利用这个办法。利用一时表有两个方面的优点。起首,它削减了与主表上SELECT查询语句的争用,因而,实行更快。其次,从一时表将纪录装进主表的总工夫较分离装载纪录的总工夫少;响应的索引高速缓存只需在每一个批量装载停止时举行革新,而不是在每行装载后革新。这个战略的一个使用是进进Web服务器的Web页会见MySQL数据库。在此情况下,大概没有包管纪录当即进进主表的较高权限。
假如数据其实不完整是那种在体系非一般封闭事务中拔出的单个纪录,那末削减索引革新的另外一战略是利用MyISAM表的DELAYED_KEY_WRITE表创立选项(假如将MySQL用于某些数据录进事情时大概会呈现这类情形)。此选项使索引高速缓存只偶然革新,而不是在每次拔出后都要革新。
假如但愿在服务器局限内使用提早索引革新,只需使用--delayed-key-write选项启动mysqld便可。在此情况下,索引块写操纵提早到必需革新块以便为其他索引值腾出空间为止,或提早到实行了一个flush-tables命令后,或提早到该索引表封闭。
无疑希望员工得到系统、有深度的培训,显然MySQL在这一点上还做得很不够。 所以你总能得到相应的升级版本,来满足你的需求。 代替了原来VB式的错误判断。比Oracle高级不少。 可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。 分区表效率问题肯定是大家关心的问题。在我的试验中,如果按照分区字段进行的查询(过滤)效率会高于未分区表的相同语句。但是如果按照非分区字段进行查询,效率会低于未分区表的相同语句。 换言之,只有在不断的失败中尝试成功,而关于失败的总结却是很少的 语句级快照和事务级快照终于为SQLServer的并发性能带来了突破。个人感觉语句级快照大家应该应用。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被提示修改不成功要求重试时,会杀人的! 分区表是个亮点!从分区表也能看出微软要做大作强SQLServer的信心。资料很多,这里不详细说。但是重点了解的是:现在的SQLServer2005的表,都是默认为分区表的。因为它要支持滑动窗口的这个特性。这种特性对历史数据和实时数据的处理是很有帮助的。 SP4包括用于以下SQLServer2000组件的程序包:Database组件(下载文件:SQL2000-KB884525-SP4-x86.EXE)更新SQLServer2000的32位Database组件,包括数据库引擎、复制、客户端连接组件及工具。有关其他信息,请参阅ReadmeSql2k32Sp4.htm。AnalysisServices组件(下载文件:SQL2000.AS-KB884525-SP4-x86.EXE)更新SQLServer2000的32位AnalysisServices。
页:
[1]