数据库程序员面试分模拟题2.docx
数据库程序员面试分模拟题2简答题1. 在Undo表空间数据文件丢失的情况下如何恢复?正确答案:恢复大约nJ以分为3种情况:有备份,这种情况卜.直接采用备份的文件进行恢复即可;无备份但是有完整的归档(江南博哥)文件存在,这种情况卜可以使用命令"A1.TERDATABASECREATEDATAFI1.E文件号S,u01apporacleoradatalhrdbundotbs01.dbf'size50m;“来创建丢失的Und。文件,然后使用“RECOVERDATAFI1.E文件号;”进行数据库文件恢复即可;无备份,归档文件丢失,在这种情况下的恢复比较复杂。首先应该切换Und。表空间到一个新建的UndO表空间中,并设置原有表空间的管理模式为手动管理模式,然后将隐含参数“_oFF1.lNE_rollback_segments”设置为TRlJE,些关键性的命令如下:A1.TERSYSTEMSETUM)C1.TAB1.ESPACE=UNDOTBS2SCOPE=SPFI1.E;A1.TERSYSTEMSETUM)C1.vANAGEMENT=MANUA1.SCOPE=SPFI1.E:A1.TERSYSTEMSET*OFF1.INEROI.1.BCKSEGMENTS"=TRUESCOPD=SPFI1.E;A1.TERSYSTEMSET"CORRUPTEDRo1.1.BACKSEGMENTS*=*SYSSM1.1$','SYSSMU2$'SCOPE=SPFI1.E;CREATEUNDOTAB1.ESPACEUNDOTBS1DTFI1.E'u03apporacteoradata/ora1024gundotbs01.dbf,SIZE50MAUToEXTENDON;A1.TERSYSTEMSETUND(1.TAB1.ESPACE=UNDoTESlSCOPE=SPFI1.E;A1.TERSYSTEMSETUND05ANAGEMENT=AUTOSCOPE=SPFI1.E;A1.TERSYSTEMRESET*_OEF1.1NE_RO1.1.BACK_SEGMENTS*SCOPE:SPFI1.ESID=*'A1.TERSYSTEMRESET*_CORRUPTED_RO1.I.BACK_SEGMENTS*SCOPE=SPFI1.ESID=;考点RMAN2. 什么是间隙(NeX1.Key)锁?正确答案:当使用范围条件而不是相等条件检索数据的时候,并请求共享或排它锁时,InnoDB会给符合条件的已有数据记录的索引项加锁;对于键值在条件范围内但并不存在的记录,叫作“间隙(GAP)”,InnoDB也会对这个“间隙”加锁,这种锁机制就是所谓的间隙(NeXt-Key)锁。间隙锁是InnODB中行锁的种,但是这种锁锁住的不止一行数据,它锁住的是多行,是一个数据范围。间隙锁的主要作用是为了防止出现幻读(PhantomRead)»用在RePeated-Read(简称RR)隔离级别下。在Read-COmmiICd(简称RC)下,一般没有间隙锁(有外键情况下例外,此处不考虑)。间隙锁还用于恢熨和复制。间隙锁的出现主要集中在同一个事务中先DE1.ETE后INSERT的情况,当通过一个条件删除一条记录的时候,如果条件在数据库中已经存在,那么这个时候产生的是普通行锁,锁住这个记录,然后删除,最后释放锁。如果这条记录不存在,那么问题就来了,数据库会扫描索引,发现这个记录不存在,这个时候的DE1.ETE语句获取到的就是一个间隙锁,然后数据库会向左扫描,扫到第一个比给定参数小的值,向右扫描,扫描到第一个比给定参数大的值,然后以此为界,构建一个区间,锁住整个区间内的数据,一个特别容易出现死锁的间隙锁就诞生了。在MySQ1.的InnODB存储引擎中,如果更新操作是针对个区间的,那么它会锁住这个区间内所有的记录,例如,UPDATEXXXXWHEREIDBETWEENAANDB,那么它会锁住A到B之间所有记泉,注意是所有记录,甚至这个记录并不存在也会被锁住,这个时候,如果另外一个连接需要插入一条记录到A与B之间,那么它就必须等到上一个事务结束。典型的例子就是使用AUTOJNCREMEYrID,由于这个ID是一直往上分配的,因此,当两个事务都INSERT时,会得到两个不同的ID,但是这两条记录还没有被提交,因此,也就不存在,如果这个时候有一个事务进行范围操作,而且恰好要锁住不存在的ID,就是触发间隙锁问题。所以,MySQ1.中尽量不要使用区间更新。InnoDB除了通过范围条件加锁时使用间隙锁外,如果使用相等条件请求给一个不存在的记录加锁,那么InnODB也会使用间隙锁!间隙锁也存在副作用,它会把锁定范围扩大,有时候也会带来麻烦。如果要关闭,那么一是将会话隔离级别改到RC下,或者开启innodb_locks_unsafe_for_binlog(默认是OFF)。间隙锁只会出现在辅助索引上,唯一索引.主键去引亮没有间隙锁。间隙锁(无论是S还是X)只会阻塞INSERT操作。在MySQ1.数据库参数中,控制间隙锁的参数是innodb_1ocks_unsafe_for_bin1og,这个参数的默认值是OFF,也就是启用间隙锁,它是一个加尔值,当宿为TRuE时,表示DlSAB1.E间隙锁。考点锁3. 如何在执行恢复的时候将数据文件恢复到别的路径?正确答案:主要采用命令"setnewnamefordatafile”和4<switchdatafileall;"。考点RMAN4. 如何插入单引号到数据库表中?正确答案:可以用ASCIl码处理,其他特殊字符如&也一样,如下:INSERTINTOTVA1.UESCICHR(39),m,);CHR(39)代表字符'或者用两个单引号表示一个:INSERTINTOTVA1.UESCm,):一两个”可以表示一个5. 密码延迟验证是什么?如何屏蔽?正确答案:从OraCIeIIg开始,如果一个用户使用不正确的密码尝试登录数据库,那么随着登录失败次数的增加,每次登录验证前延迟等待的时间也会增加。通过设置EVENTS28401可以屏蔽密码延迟验证:A1.TERSYSTEMSETEVENT=28401TRACENAMECONTEXTFOREVER,1.EVE1.1,SCOI,E=SPF11.E;设置该事件后重启数据库即可。关于28401事件的解释如下:oraclcorcIalhroerrora284D128401,00000,"EventtodisabledelayafterthreefailedIOginattempts*/Document:NO/*Cause:N/A/*Action:Setthiseventinyourenvironmenttodisablethelogindelay/whichwillotherwisetakeplaceafierthreefailedloginattempts./*Note:THISISNOTAUSEREBROKNUMBER/MESSAGE.THISDOESNOTNEEDTOBE/TRANS1.ATEDOKDOCUMENTED.对于正常的系统,由于密码的更改,可能存在某些被遗漏的客户端,不断重熨尝试使用错误密码登录数据库,从而引起数据库内部长时间的“libraecachelock”或ttrowcacheIOCk"的等待,这种情形非常常见。这种现象在Oracle10.2和11.1中体现的等待事件为"rowcachelock",而在OraCIe11.2中体现的等待事件为rtIibrarycacheIockw,当出现这类问题时,非常典型的AwR报告呈现如卜工首先在TOP5中,可能会看到显著的IibraryCaCheIOCk的等待,以下范例来自OraCle11.2.0.3版本的真实情况:Top5TimedForegroundEventsEventWaltsTlm()Avgwait(mt)%DBtimeWaItCIasslibrarycachelock5143.139,90261087599988Concurrency:DBCPU3I幽I1ljrsorptnSwaMon×450制一WI0.00!ConcurrencyI若数据库版本小于U.2,则在WR中可能的情况如下:Top5TimedForegroundEventsEventWaitsTime(三)Avgwait(ms)%DBtimeWaitCIassrowcachelock237310130836.72ConcuencyDBCPU23127.35logfilesync1.05019182.24Commitdbfilesequentialread1,9731051.19UserI/Odirectpathread1.540640.67USerI/O在这类情况下,时间模型(TimeModelStatiStiCS)中会显示如下指标,其中,“connectionmanagementcallelapsedtime"占据了主要的DBTime,这个等待直接表明是在建立数据库连接时产生的:TimeModelStatistics Totaltimeindatabaseuser-calls(DBTime):3143648.8s Statisticsincludingthewordbackground-measurebackgroundPrt Orderedby%orDBtimedesc,StatisticnameStatisticNameTime(三)%OfDBTlmeiconnectionmanagementcallelapsedtime3,143,473,3¾99.991DBCPU336.16o。1.Sqlexecuteelapsedtime122.99100011-»-"-.-,iparsetimeelapsedi2_0.00:I此外,在AWR中的DiCtionaryCacheStatS部分也可以看到很明显的等待。此问题在MOS上相应的文档为“High,1ibrarycachelock'WaitTimeDuetoInvalid1.oginARempts(1309738.1)«此外,从OraCIeIIg开始,开启了密码大小写验证,如果数据库是从OraCle10g升级或迁移过来的,那么需要特别地注意这个变化,可以通过初始化参数SEC_CASE_SENSITIVE_1.OGON来控制这个特性。考点用户6. 什么是SQ1.语言?SQ1.有哪些特点?正确答案:SQ1.(StructureQuery1.anguage,结构化查询语言)是一种在关系型数据库中定义和操纵数据的标准语言。关系型数据库采用SQ1.作为客户端程序与数据库服务器间沟通的标准接口。客户端发送SQ1.指令到服务器端,服务器端执行相关的指令并返回其查询的结果。在数据库服务器端执行的SQ1.指令可以实现各种数据库操作和管理功能,例如,数据的查询和更新(包括添加、修改和删除数据)操作;创建、修改和删除各种数据库对象(如数据表、视图、索引等);数据库用户账户管理、权限管理等。关系数据语言的共同特点:语言具有完备的表达能力,是非过程化的集合操作语言,功能强,能够嵌入高级语言中使用。考点SQ1.分类7. 1.inux下如何查看系统启动时间和运行时间?正确答窠:可以用uptime和查看procUPtime文件。Duptime命令输出:16:11:40UP59days,4:21,2users,loadaverage:0.00,0.01,0.002)杳看procuptimc文件计算系统启动时间cat/proc/uptime输出:5113396.94575949.85第一数字即是系统运行的时间5113396.94秒,运用系统工具date即可算出系统启动时间。date-d,S(awk-F'print$1,procuptime)secondago"+"%Y-%m-输出:2008-11-0911:50:313)杳看procUPtime文件计算系统运行时间moreprocuptimeawk-F.,run_days=$1/86400;runhour=($1%86400)/3600;run_minute=($1%3600)/60;run_second=$l(60;PrinIf("系统已运行:%d天刎时%d分%d秒n”,run_days,run_hour,run_minute,runsecond)'输出:系统工运行:59女4时13分9秒此外,还可以使用如下命令杳询:who-b查看最后一次系统启动的时间who-r查看当前系统运行时间lastrebootnJ以看到1.inUX系统历史启动的时间top命令的up后表示系统到目前运行了多久时间w命令的up后表示系统到目前运行了多久时间8. MySQ1.中的索引有什么优点?正确答窠:索引(IndeX)是数据库优化中最常用也是最重要的手段之通过索引通常可以帮助用户解决大多数的SQ1.性能问题。索引是帮助MySQ1.高效获取数据的数据结构,它用于快速找出在某个列中含有某一特定值的行。如果不使用索引,那么MySQ1.必须从第1条记录开始读完整个表直到找出相关的行。表越大,花费的时间越多。如果表中查询的列有一个索引,那么MySQ1.就能快速到达一个位国去搜寻数据文件的中间,没有必要看所有数据。索引在MySQ1.中也叫作“键(Key)”,是存储引擎用于快速找到记录的一种数据结构。总体来说,索引有如下几个优点:D索引大大减少了服务器需要扫描的数据量。2)索引可以帮助服务器避免排序和临时表。3)索引可以将随机I/O变为顺序I/O。考点索引9. E-R图向关系模型的转换一般遵循哪些原则?正确答案:E-R图向关系模型的转换一般遵循如下原则:1) 一个实体型转换为一个关系模式。实体的属性就是关系的属性。实体的码就是关系的码。例如,学生实体可以转换为如卜关系模式,其中,学号为学生关系的码:学生(学号,姓名,出生口期,所在系,年级,平均成绩)。同样,性别、宿舍、班级、档案材料、教师、课程、教室、教科书都分别转换为一个关系模式。2) 一个联系转化为一个关系模式,与该联系相连的各实体的码以及联系的属性转化为关系的属性。该关系的码有如下3种情况:若联系为1:1,则每个实体的码均是该关系的候选码。若联系为l:n,则关系的码为n端实体的码。若联系为m:n,则关系的码为诸实体码的组合。下面分别来讲解这3种情况。联系为1:1一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。a)如果转换为一个独立的关系模式,那么与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,每个实体的码均是该关系的候选码。b)如果与某一端对应的关系模式合并,那么需要在该关系模式的属性中加入另一个关系模式的码和联系本身的属性。联系为'n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。a)如果转换为一个独立的关系模式,那么与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为n端实体的码。b)如果与n端对应的关系模式合并,那么在n端实体对应模式中加入1端实体所对应关系模式的码,以及联系本身的属性。而关系的码为n端实体的码。联系为m:n一个m:n联系转换为一个关系模式。与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合。3)同一实体集的实体间的联系,即自联系,也可按上述1:1、l:n和m:n三种情况分别处理。例如,如果教师实体集内部存在领导与被领导的1.n自联系,那么可以将该联系与教师实体合并,这时主键职工号将多次出现,但作用不同,可用不同的属性名加以区分。例如,在合并后的关系模式中,主犍仍为职工号,再增设一个“系主任”属性,存放相应系主任的职工号。4)具有相同码的关系模式可合并。为了减少系统中的关系个数,如果两个关系模式具有相同的主键,那么可以考虑将它们合并为一个关系模式。合并方法是将其中一个关系模式的全部属性加入另一个关系模式中,然后去掉其中的同义属性(nJ能同名也可能不同名),并适当调整属性的次序。考点E-R模型10. 在OraCIe中,什么是异常?正确答案:异常(EXCePtion)处理是用来处理正常执行过程中未预料到的事件,包括程序块的异常处理、预定义的错误和自定义错误。如果P1./SQ1.程序块一旦产生异常,而程序并没有指出如何处理,那么程序就会自动终止运行。异常处理部分一般放在P1./SQ1.程序体的后半部分,结构如下。EXCEPTIONWHENfirst_exceptionTHEN<codetohandlefirstexertion>WHENSeCOnd.exceptionTHEN<codetohandlesecondexception>WHENOTHERSTHEN<codetohandleOTHERSexception>考点程序处理11. RESET1.OGS和NORESET1.OGS的区别是什么?正确答案:RESET1.OGS和NoRESET1.oGS主要用在两个地方,第一是在创建控制文件的时候,第:是在打开数据库的时候。当将控制文件备份到TRACE文件时,可以看到里面包含了两部分的重建语句,一个是使用RESET1.OGS,另一个是使用NORESET1.OGS。备份控制文件的SQ1.如下:SQ1.>allerdatabasebackupcontrolfiIetotraceas,homeoraclecctetllhr.sq:若当前的所有在线日志11J用时,则在创建控制文件的时候使用Noresetlogs0若当前的在线日志有所损坏时,则在创建控制文件的时候需要使用RESET1.OGSo若使用RESET1.OGS则将导致在线口志里的内容丢失,并且所有的备份失效。在打开数据库的时候也可以使用Kesetlogs或Nokesetlogs选项。在做r不完全恢复后,RESET1.OGS会初始化日志,重置日志序列号(从1开始),并且创建一个新的INCARNATlO可以使用RMAN命令查看INCARNATION的信息:RMAN>1.1STINCARNATION;做不完全恢夏必须使用RESET1.oGS,但是RESET1.OGS也可以做完全恢曳。而NORESET1.oGS则必须是在做完全恢熨时使用。RBSET1.OGS会重置日志序列号,强制清空或重建在线日志,而noreseti.ogs则不会这么做。考点RMAN12. 如何查找逻辑读、物理读、执行次数和解析次数最多以及执行时间最长的SQ1.语句?如何查找或监控效率低下的SQ1.语句?正确答案:效率低下的SQ1.-股是执行时间较长的SQ1.语句,可以通过如下几种方式来监控分析:1)当前系统的SQ1.可以通过监控VJSQkMONlTOR,VSSESSION视图来实现,记录执行时间较长的SQ1.语句。对于历页SQ1.可以通过分析DBAjnST_SQ1.STAT视图。2)穿析现有的系统中的执行计戈U,重点检查驱动表与被驱动表顺序、表连接算法、排序是否有索引、索引使用。3)分析AWR、ASH和ADDM。4)通过OEM中性能监控捕获5s以上的SQ1.o5)通过Gv$SQ1.AREA视图来分析。考点性能诊断13. 如何计算一个字符在字符串中出现的次数?正确答案:可以利用REGEXl1.eOUNT、REGEXl1.REP1.ACE或TRANS1.ATE系统函数,也可以自定义函数来计算一个字符在字符串市出现的次数。考点函数相关14. 如何快速地清理Oracle的进程?正确答案:若想要快速清理掉OraClC的进程,最直接的办法是杀Pmon进程。有如下3条命令可供选择,其中加粗的OrCI替换成ORAC1.ESID的值即可。kill-9,ps-efIgreporc11grep-vgrepawk'print$2)''ps-efgreporc1grep-vgrep!awk'print$2'xargski11-9ipcs-mIgreporacleawk,print$2:'xargsipcrmshm若想要快速杀掉集群的进程,则可以执行如下命令:km-9'ps-efgrepd.bingrep-vgrepawk'print$2''注意,生产库上严禁使用,否则可能导致集群不能正常启动。考点会话15. VySQ1.有几种存储引擎(表类型)?各自有什么区别?正确答案:MySQ1.官方有多种存储引擎:MyISAM.InnoDB,MERGE、MEMORY(HEAP)xBDB(BerkeleyDB).EXAMP1.E、FEDERATED.ARCHIVE.CSV、B1.ACKHO1.E0第三方存储引擎中比较有名的有TOkUDB、Infobright.InnfiniDIkXtraDBdnnoDB强版本)。其中,最常见的两种存储引擎是MyISAM和InnoDBOMylSAM是MySQ1.关系型数据库管理系统的默认存储引擎(MySQ1.5.5以前)。这种MySQ1.表存储结构从旧ISAM代码扩展出许多有用的功能。从MySQ1.5.5开始,InnoDB引擎由于其对事务参照完整性,以及更高的并发性等优点开始逐步地取代MyISAM,作为MySQ1.数据库的默认存储引擎。下面逐一介绍各种存储引擎。1.MylSAMMyISAM存储引擎管理.事务表,提供高速存储和检索,以及全文搜索能力。该引擎插入数据快,空间和内存使用比较低。(D存储组成每个MyISAM在磁盘上存储成三个文件。每一个文件的名字就是表的名字,文件名都和表名相同,扩展名指出了文件类型。这里特别要注意的是,MyISAM不缓存数据文件,只缓存索引文件。1)表定义的扩展名为.frm(frame,存储表定义)。2)数据文件的扩展名为.MYDNYData,存储数据)。3)索引文件的扩展名是.MYI(MYIndex,存储索引)。数据文件和索引文件可以放置在不同的目录,平均分布I/O,获得更快的速度,而且其索引是压缩的,能加载更多索引,这样内存使用率就对应提高了不少,压缩后的索引也能节约一些磁盘空间。(2)特点1)不宜评事务,不支持外键约束,但支持全文索引,这可以极大地优化1.IKE查询的效率。2)表级锁定(更新时锁定整个表):其锁定机制是表级索引,这虽然可以让锁定的实现成本很小,但是也同时大大降低了其并发性能。MyISAM不支持行级锁,只支持并发插入的表锁,主要用于高负载的查询。3)读写互相阻塞:不仅会在写入的时候阻塞读取,MyISAv还会在读取的时候阻塞写入,但读本身并不会阻塞另外的读。4)不缓存数据,只缓存索引:MylSAM可以通过keybuffer缓存,以大大提高访问性能,减少磁盘I/O,但是这个缓存区只会缓存索引,而不会缓存数据。rootQmysqljrepkey_fkey_buffer_size=16M5)读取速度费快,占用资源相时少。6)MyISAM引擎是MySQ1.5.5之前版本缺省的存储引擎。7)并发量较小,不适合大量UPDATE。(3)适用场景如果表主要用于插入新记录和读出新记录,那么选择MyISAM存储引擎能实现处理的高效率。如果应用的完整性和并发性要求很低,那么也可以选择MylSAM存储引擎。它是在Neb、数据仓储和其他应用环境下最常使用的存储引擎之一。具体来说,适用于以卜场景:D不需要事务支持的业务,一般为读数据比较多的网站应用。2)并发相对较低的业务(纯读纯写高并发也可以)。3)数据修改相对较少的业务。4)以读为主的业务,例如,WMkB1.OG、图片信息数据库、用户数据库、商品数据库等业务。5)对数据一致性要求不是非常高的业务。6)中小型网站的部分业务。小结:单一对数据库的操作都可以使用MylSAM,所谓单一就是尽量纯读,或纯写(INSERT,UPDATE,DE1.ETE)等。生产建议:没有特别需求,一律用InnoDBo(4)MylSAM引擎调优精要1)尽量索引(缓存机制)。2)调整读写优先级,根据实际需要确保重要操作更优先。3)启用延迟插入改善大批量写入性能(降低写入频率,尽可能多条数据一次性写入)。4)尽量顺序操作让INSERT数据都写入尾部,减少阻塞。5)分解大的操作,降低单个操作的阻塞时间。6)降低并发数,某些高并发场景通过应用进行排队机制。7)对于相对静态的数据,充分利用QUeryCaChe可以极大地提高访问效率。root三mysql3307#fquery_cache_size=2Mquery一CaChe_limiI=IMquerycacheminresunit=2k这几个参数都是MySQ1.自身缓存设置。8)MyISAM的COUNT只有在全表扫描的时候特别高效,带有其他条件的COUNT都需要进行实际的数据访问。9)把主从同步的主库使用InnoDB,从库使用MylSAM引擎。2.InnoDBInnoDB用于事务处理应用程序,主要面向O1.TP方面的应用。该引擎由InnoDB公司开发,其特点是行锁设置,并支持类似于OraCIe的非锁定读,即默认情况下读不产生锁。InnODB将数据放在一个逻辑表空间中。InnoDB通过多版本并发控制来获得高并发性,实现了ANSl标准的4种隔离级别,钛认为Repealable,使用一种被称为next-keylocking的策略避免幻读O对于表中数据的存储,InnoDB采用类似OraCIe索引组织表CIUSlCrCd的方式进行存储。如果对事务的完整性要求比较高,要求实现并发控制,那么选择InnODB引擎有很大的优势。需要频繁地进行更新,删除操作的数据库,也可以选择InnoDB存储引擎。因为InnODB存储引擎提供了具有提交(COMMn')、回滚(Ro1.1.BAeK)和崩溃恢复能力的事务安全。InnoDB类型的表只有ibd文件,分为数据区和索引区,有较好的读写并发能力。物理文件有日志文件、数据文件和索引文件。其中,索引文件和数据文件是放在一个目录下,可以设置共享文件、独享文件两种格式。(D特点1)支持事务:包括AClD事务支持,支持4个事务隔离级别,支持多版本读。2)行级锁定(更新时一般是锁定当前行):通过索引实现,全表扫描仍然会是表锁,注意间隙锁的影响。3)支持崩溃修复能力和MVCCo4)读写阻塞与事务隔离级别相关。5)具有非常高效的缓存特性:能缓存索引,也能缓存数据。6)整个表和主键以C1.USTER方式存储,组成一棵平衡树。7)所有SECONDARYINDEX都会保存主键信息。8)支持分区、表空间,类似OraCIe数据库。9)支持外键约束(ForeignKey),外键所在的表称为子表,而所依赖的表称为父表。10)InnoDB支持自增长列(AUT0NCREMENT),自增长列的值不能为空。U)InnoDB是索引和数据紧密施绑的,没有使用压缩,从而会造成InnODB比MyISAM体积庞大得多。(2)优点支持事务,用于事务处理应用程序,具有众多特性,包括ACID事务支持,支持外键,同时支持崩溃修复能力和并发控制。并发量较大,适合大量UPDATEo(3)缺点对比MyISAM的存储引擎,InnoDB写的处理效率差一些,并且会占用更多的磁盘空间以保留数据和索引。相比MylSAM引擎,InnoDB引擎更消耗资源,速度没有MyISAM引擎快。(4)适用场景如果对事务的完整性要求比较高,要求实现并发控制,那么选择InnoDB引擎有很大的优势。需要频繁地进行更新,删除操作的数据库,也可以选择InnoDB存储引擎。具体分类如下:1)需要事务支持(具有较好的事务特性)。2)行级锁定对高并发有很好的适应能力,但需要确保查询是通过索引完成。3)数据更新较为频繁的场景,例如,BBS(BulIetinBoardSystem,电子公告牌系统)、SNS(SocialNetworkSite,社交网)等。4)数据一致性要求较高的业务。例如,充值、银行转账等。5)硬件设备内存较大,可以利用InnODB较好的缓存能力来提高内存利用率,尽可能减少磁盘I/O。心艰唠RB07)grep-iinnc11nxnfkhjabkj>pe=InnoDBinno*_addhiOMIjJianJwlji-4MinnoMj)oolj=32Minnodb-ta.filcjB=ibdual:l28M:IUIOalendi11noJikjjfccjd5=4物理数据文件:rootmysql3307#11data/ibdatal-rw-rw1mysqlmysql134217728May1508:31data/ibdatal6)相比VylSAM引擎,InnoDB引擎更消耗资源,速度没有MylSAM引擎快。IrmoDB引擎调优精要1)主键尽可能小,避免给SECoNDARYlKDEX带来过大的空间负担。2)避免全表扫描,因为会使用表锁。3)尽可能缓存所有的索引和数据,提高响应速度,减少磁盘1/0消耗。4)在执行大量插入操作的时候,尽量H己控制事务而不要使用utocommit自动提交。有开关可以控制提交方式。5)合理设置innodb_flush_log_at_trx_commit参数值,不要过度追求安全性。-6)避免主键更新,因为这会带来大量的数据移动。3. memorycheap)MEMoRY存储引擎(之前称为HEAP)提供“内存中”的表。如果需要很快的读写速度,对数据的安全性要求较低,那么可选择MEMoRY存储引擎。MEMORY存储引擎对表大小有要求,不能建太大的表。所以,这类数据库只适用相对较小的数据库表。如果mysqld进程发生异常,那么数据库就会重启或崩溃,数据就会丢失,因此,MEvORY存储引擎中的表的生命周期很短,一般只使用一次,非常适合存储临时数据。(1)特点DMEvoRY存储引擎将所有数据保存在内存(RAM)中,在需要快速查找引用和其他类似数据的环境下,可提供极快的访问速度。2)每个基于MEMORY存储引擎的表实际时应一个磁盘文件,该文件的文件名和表名是相同的,类型为.rm。该文件只存储表的结构,而其数据文件都是存储在内存中,这样有利于对数据的快速处理,提高整个表的处理能力。3)MEMORY存储引擎默认使用哈希'(HASH)索引,其速度比使用B-Tree型要快,但安全性不高。如果希望使用B-Tree型,那么在创建的时候可以引用。(2)适用场景如果需要很快的读写速度,那么在需要快速查找引用和其他类似数据的环境下,对数据的安全性要求较低,可选择MEVORY存储引擎。(3)优点将所有数据保存在内存(RAM)中,默认使用HASH索引,数据的处理速度快。(4)缺点不支持事务,安全性不高;MEMORY存储引擎对表大小有要求,不能建太大的表。4. MERGEMERGE存储引擎允许将一组使用MyISAM存储引擎的并且表结构相同(即每张表的字段顺序、字段名称、字段类型、索引定义的顺序及其定义的方式必须相同)的数据表合并为一个表,方便了数据的查询。需要注意的是,使用MERGE“合并”起来的表结构相同的表最好不要有主键,否则会出现这种情况:一共有两个成员表,其主健在两个表中存在相同情况,但是写了一条按相同主键值查询的SQ1.语句,这时只能查到UNlON列表中第一个表中的数据。MERGE存储引擎允许集合将被处理同样的MyISAM表作为一个单独的表。适用场景:MERGE存储引擎允许MySQ1.DBA或开发人员将一系列等同的MyISAM表以逻辑方式组合在一起,并作为1个对象引用它们。对于诸如数据仓库等,V1.DB(Yery1.argeDataBase,超大型数据库)环境十分适合。优点:便于同时引用多个数据表而无须发出多条查询。缺点:不支持事务。5. BDB(BerkeleyDB)BDB是事务型存储引擎,支持CoMMlT、Ro1.1.BACK和其他事务特性,它由XX软件公司(httpww.*.cOnI)开发。BDB是一个高性能的嵌入式数据库编程库(引擎),它可以用来保存任意类型的键/值对(Key/VaIUePair),而且可以为一个健保存多个数据。BDBnJ以支持数干的并发线程同时操作数据库,支持最大256TB的数据。BDB存储引擎处理事务安全的表,并以哈希为基础的存储系统。适用场景:BDB存储引擎适合快速地读写某些数据,特别是不同KEY的数据。优点:支持事务。缺点:在没有索引的列上操作速度很慢。6. EXAMP1.EEXAMP1.E存储引擎是一-个“存根”引擎,可以用这个引擎创建表,但数据不能存储在该引擎中。EXAMP1.E存储引擎可为快速创建定制的插件式存储引擎提供帮助。7. NDBDB存储引挈是一个集群存储引擎,是被MySQ1.CIUSter用来实现分割到多台计算机上的表的存储引擎,类似于OraCle的RAC,但它是ShareNOthing的架构,因此,能提供更高级别的高可用性和可扩展性。DB的特点是数据全部放在内存中,因此,通过主键查找非常快。它在VySQ1.-MaX5.1二进制分发版里提供。(1)特性1)分布式:分布式存储引擎,可以由多个XDBClUSter存储引擎组成集群分别存放整体数据的一部分。2)支持事务:和InnODB一样,支持事务。3)可与Inysqld不在一台主机:可以和mysqld分开存在于独立的主机上,然后通过网络和mysqld通信交互。4)内存需求量巨大:新版本索引以及被索引的数据必须存放在内存中,老版本所有数据和索引必须存在于内存中。(2)适用场景1)具有非常高的并发需求。2)对单个请求的响应并不是非常严格。3)查询简单,过滤条件较为固定,每次请求数据量较少。4)具有高性能查找要求的应用程序,这类查找需求还要求具有最高的正常工作时间和可用性。(3)优点1)分布式:分布式存储引擎,可以由多个NDBClUSter存储引擎组成集群分别存放整体数据的部分。2)支持事务:和InnODBi样,支持事务。3)可与mysqld不在一台主机:可以和nysqld分开存在于独立的主机上,然后通过网络和mysqld通信交互。(4)缺点内存需求量巨大:新版本索引以及被索引的数据必须存