数据库程序员面试分模拟题3.docx
数据库程序员面试分模拟题3简答题1. 如何启动OracIe数据库的监听日志?正确答案:OraCle监听器是一个服务器端程序,用于监听所有来自客户端的请求,并为其提供数据库服务。以下是一些常(江南博哥)用的设置。D设置监听器口志文件目录:ISnrCtlSET1.0G_DIRECTORYdirectory02)设置监听器口志文件名:ISnrCtISET1.0G_FI1.Efile-nameo3)设置监听器日志的状态:IsnrctlSET1.oG.STATUSonjoff。考点网络2. 审计有哪些类型?正确答案:OraCle中审计总体上可分为“标准审计”和“细粒度审计”,后者也称为“基于政策的审计”,在OraCIeIOg之后功能得到很大增强。其中,标准审计可分为用户级审计和系统级审计。用户级审计是任何OraCIe用户都可设置的审计,主要是用户针对自己创建的数据库表或视图进行审计,记录所有用户对这些表或视图的一切成功和(或)不成功的访问以及各种类型的SQ1.操作。系统级审计只能由DB设置,用以监测成功或失败的登录要求、监测GRANT和REVOKE操作以及其他数据库级权限下的操作。在OraCIe中分别支持以下三种标准审计类型,或者说,可以从3个角度去启用审计:1)语句审计(StatementAUditing),对某种类型的SQ1.语句审计,不指定结构或对象。审计SQ1.语句的成功执行或不成功执行。这里从SQ1.语句的角度出发,进行指定。审计只关心执行的语句。例如,AUDITCREATETAB1.E语句,其中,AUDn(为使用审计的关键字。该语句表示对CREATETAB1.E语句的执行进行记录,不管这条语句是否为针对某个对象的操作。2)权限审计(PriVilegeAuditing),对执行相应动作的系统特权的使用审计,对涉及某些权限的操作进行审计,这里强调“系统权限”,例如,“AUDITCRETETAB1.E;”命令,可以表咀对涉及“CREATETAB1.E”权限的操作进行审计。所以,在这种命令的情况下,既产生一个语句审计,又产生了一个权限审计。有时候语句审计和权限审计是相互重复的。3)对象审计(ObjeetAUditing),对一特殊模式对象上的指定对象的审计。对一个特殊模式对象上的DM1.语句进行审计。记录作用在指定对象上的操作。例如,AUDITSE1.ECTONSeoTT.DEPT语句,表示指定SCOTT用户的DEPT表,审计对其进行的SE1.ECT语句。考点审计3. 在不知道原密码的明文是什么的情况下,如何更新密码?正确答案:在OraCle中,若用户的密码变为锁定状态(1.OeKED、1.OCKED(TIMED)时,DBA可以直接执行“A1.TERUSER用户名ACC(XJNTUN1.OCK”来解锁。但是,如果用户的状态变成过期状态(EXPIRED、EXP1RED(GKACE),那么DBA必须要更改用户的密码账户才能重新使用。但有些时候,因为各种原因并不知道原密码的明文是什么,这时候可以有如下2种办法来更新密码。1 .用原密码的密文来更改密码在OraCleIOg中,DBAJSERS视图的PASSWoRD字段提供了密码的密文形式,而在OraCIeIIg中,该字段被弃用了,内容为空,但是在基表USERS中的PASSWORD字段依然有记录密文形式,所以可以通过如卜的形式来获取密码的密文形式:SE1.ECTD.USERNAVE,D.CCOUNT-STTUS,D.1.OCK_DATE,D.EXPIRY_DATE,D.PROFI1.E,NV1.(D.PASSWORD,(SE1.ECTNB.PASSWORDI-ROMUSERSNBWHERENB.NME=D.USERNAME)PASSWORDFROMDBA.USERSDWHERED.USERNAME='1.HRSYS':UserhameACCuw,sssIlockdateIexpirydateprofile!passwordJjIHRSYSOPENF09740420A44S另外,nJ以通过DBVSMETADATA.GETDD1.包或者expdp、exp命令来获取创建用户的语句从而获取密码的密文形式。SYSlhrdb>setlong9999SYSlhrdb>SE1.ECTDBMSJ!ETDAT.GET_DD1.CUSER','1.HRSYS')DD1._SQ1.FROMDUA1.;DD1.SQ1.CREATEUSER"1.HRSYS"IDENTIFIEDBYVA1.UES,S53EA8OBAE11F79D6946453F38O59E3O313FE84C96AE2EE4F3AA35A648BD;F809740420A44EFCDEFAU1.TTAB1.ESPACE"USERS"TEMPORARYTAB1.ESPACE"TEMP"获取了密码的密文后就11J以用如下的命令来修改了,注意:使用密文的命令中多了一个VA1.UES关键字:SYS(ltrdb>8taISn1.HRSYSEii徊by1.TW74W20A4EfC;ltfa!tcrtd.SYlb>CONN1.HRSYSl92.168.59.l29lr*CCWKCid.1.HRSYSgl91l6839.l29*>com:as年dbaCwmccUd.SY题加IlMWs1.HRSYSidcfifidbywlsS«53EmAEHFw制M53F3805三OI3FE84C%AE2E三AA35A(mBD;F三4M20A44EFCUseralttrdSY跑Mb>CONN1.HRSYikl92.l68.$9.l29to*Connwed.所以,即使不知道用户的原密码是什么,也可以用它的密文来更改密码。这样既保持了密码不改变,又可以把EXPIRED的状态更改掉。2 .直接更新USERS基表不管用户的状态是什么,通过更新USERS点可以让用户处于OPEN状态。考点用户4. 什么是反向键索引(RCVerSeKeyIndexes)?正确答案:反向健索引也称为反转索引,是一种B-Tree索引,它在物理上反转每个索引键的字节,但保持列顺序不变。例如,如果索引键是20,并且在一个标准的B-Tree索引中此健被存为卜六进制的两个字节C1、15,那么反向键索引会将其存为15、CUSYSorciasm>SE1.ECTDUMP(20,16,)FROMDUA1.;DUMP(2016,)Typ=21.en=2:cl,15反向键索引解决了在B-Tree索引右侧的叶块争用问题。在OraCIeRAC数据库中的多个实例重复不断地修改同一数据块时,这个问题尤为严重。在一个反向键索引中,对字节顺序反转,会耨插入分散到索引中的所有叶块。例如键20和21,本来在一个标准键索引中会相邻,现在存储在相隔很远的独立的块中。这样,顺序插入产生的I/O被更均匀地分布了。使用反向键索引的最大的优点莫过于降低索引叶子块的争用,减少热点块,提高系统性能。由于反向键索引自身的特点,如果系统中经常使用范围扫描进行读取数据(例如在WHERE子句中使用“BETWEENAND”语句或比较运算符"V”">=”“V=”等),那么反向键索引将不会被使用,因为此时会选择全表扫描,反而会降低系统的性能。只有对反向键索引列进行“=”操作时,其反向键索引才会使用。创建索引时使用REVERSE关键字,如下:CREATEINDEXA1.TERA1.TERA1.TERA1.TER考点分类INDEXINDEXINDEXINDEXREV_INDEX_1.HRONXT_REVI1.HR(OBJECT_ID)REVERSE;REV_INDEXREBlIDNOREVERSE;NAME_1NXREBUI1.DON1.INENOREVERSE;ID_1NXREBUI1.DREVERSEON1.INE:ID_INXREBUI1.DON1.INEREVERSE;5. SAPIQ属于行式还是列式数据库?正确答案:SAPIQ属于列式数据库。SAPIQ是SAP(SyStemS.ApplicationsandProductsinDataPrOCeSSing)收购的原属Sybase的产品。Sybase在2001年左右就推出了列存储的SAPIQ(曾用名SybaSeIQ)数据库系统,主要用于在线分析、数据挖掘、商业智能等查询密集型应用。不同于传统的数据库,SBIQ拥有列式存储、网格架构、专利的数据压缩和先进的查询优化器。需要注意的是,由于SAPIQ采用关系模型,所以,IQ数据库依然属于关系型数据库。IQ的架构与大多数关系型数据库不同,它的设计主要用以支持大量并发用户的即时查询,其设计与执行进程优先考虑杳询性能,其次是完成批量数据更新的速度。而传统关系型数据库引擎的设计既考虑在线的事务进程乂考虑数据仓库(而事实上,往往更多地关注事务进程)。考点行存储和列存储6. 在创建数据文件时如何指定裸设备?正确答案:和普通文件没有太大的区别,都是在单引号里边写上裸设备的详细路径就可以例如,要创建一个表空间,使用两个裸设备,每个分别为30MB的大小,可以用下面的命令:CREATETAB1.ESPACERAW_TSDATAFI1.E,devrawl,SIZE30712kDATAFI1.E,devraw2,SIZE30712k;考点裸设备(RAW)7.实例恢复和介质恢复的区别是什么?正确答案:Redo日志是OraClC为确保已经提交的事务不会丢失而建立的一种机制。实际上,Redo日志的存在是为两种场景准备的,一种称为实例恢复(InSIanCeRecovery),另一种称为介质恢复(VediaRecovery)Red。口志的数据是按照THREAD来组织的,对于单实例系统来说,只有一个THREAD;对于RAC系统来说,可能存在多个THREAD。每个数据库实例拥有一组独立的RedO口志文件,拥有独立的1.OgBuffer,记录到一个THREAD的KedoR志文件中。某个实例的变化会被独立地分类有关实例恢复和介质恢复的区别见下表。实例恢复数据库没有正常关闭(即非一致性关闭,如断电、硬件故障、关键后台进程出现故障(PMON、1.GWR等),执行了SHUTDOWNABORT或STARTUP介质恢复介质恢豆是当存储的数据文件出现故障简介BORCE命令)会导致数据库实例在重启时自动使用联机Redo日志和Undo数据执行实例恢熨,具体恢熨的工作是由SMO这个后台进程来完成的,SMoN自动应用联机Redo日志文件中的条目和读取Undo表空间中的数据完成实例恢复而不需要任何用户干预。一个单实例数据库或者RAC数据库所有实例失败之后,第一个打开数据库的实例会H动执行实例恢复,这种形式的实例恢复称为崩溃恢复(CrashRecovery)o在RAC环境中,若RAC数据库的一部分但不是所有实例失败后,在RAC中幸存的实例自动执行失败实例的恢复(例如,数据文件丢失、损坏)的时候进行的,介质恢复无法闩动进行,必须手动执行RECOVERDATABASE或者RECOVERDATAFl1.E命令来实施。在做介质恢复的时候,需要使用归档日志。介质恢熨是基于物理备份恢复数据,是Oracle数据库出现介质故障时恢复的重要保障发生时机当EndSCN不等于StartSCN的时候,数据库需要做实例恢爱。若数据库异常关闭,则EndSs号将为空,数据库就需要做实例恢复恢复的目在数据库发生故障时,确保BUfferCache中的数据不会丢失:确保数据库可以当SystemCheckpointSCN.DatafileCheckpointSCN和StartSCN三者中有一个不同时就需要做介质恢复当数据文件发生故障时,能够恢复数据用源程否动否要归利资过是自完成是需开启档处于一致性状态。只有当联机Redo日志文件和Undo表空间的介质没有被破坏才能确保实例恢复能够成功OnlineRedoActiveRedO和UndO利用Redo前滚(重做):打开数据库:利用Undo回滚自动完成不需要开肩归档模式BackupSetArchive1.ogsOnline和InactiveRedo等RESTORE:RECOVER手动恢复,需要DBA干预,分为完全和不完全恢复需要开肩归档模式在系统重启后发现数据库中数据文件被rm删除了,这个时候需要执行RESTOREDTBSE11RECOVERDATABASE命令进行介质恢复用户在8:30:00触发了5个事务,分别是TkT2、T3、T4、T5o在8:38:00之前,T3和T5完成,在8:38:00产生了一个检查点事件,此时系统将对数据的更改都写入数据文件中。在8:38:27时,出现故障,导致实例异常关闭,在8:38:00至8:38:27之间的操作仅仅记录在RedOFl志中,并没有将这些更改写入数据文件中。当实例重新启动时,SMON将执行实例恢复。例如,在8:43:00分重启实例,SMON执行实例恢熨,整个执行过程可以分为两个部分:前滚和回滚。前滚是指8:38:00至8:38:27:00之间的操作应用到数据文件上,由于这些操作都记录在Redo日志中,因此只需要从RedO日志中读取这些操作并执行即可。前滚执行完毕后,SMON进程立即打开数据库,此时,数据库处于实例异常关闭前的状态。打开数据库后进入回滚,回滚阶段是指将未提交的事务回滚,即将示例中Tl、T2和T4回滚,在8:45:00时,实例恢复执行完毕考点RMAN8. 获取执行计划有哪几种方法?正确答案:对于这几种获取执行计划的方法有如下结论:1)若目标SQ1.需要执行很长时间才能返回结果,则推荐使用EXP1.AINP1.ANFOR来获取执行计划。2)若要查询目标SQ1.的所有夕游标的执行计划,则推荐使用DBMS_XP1.AX.DlSP1.AJCURSOR('&SQ1.ID',NU1.1.,ADVANCEDA1.1.STATS,)或awrsqrpt.sql来获取执行计划。3)若要分析SQ1.语句的内部调用详情,则推荐使用10046事件。4)若想确保看到真实的执行计划,则不能使用EXP1.ANP1.ANFoR和SETautotraceTRACEON1.Yexplain,5)若想获取到表的访问次数,则推荐/'*+GATHERP1.ANSTATISTICS*/。6)若数据库版本大于10g,则对执行时间较长的SQ1.语句推荐使用SQ1.实时监控特性查看html报告。考点执行计划9. 如果联机Red。口志文件损坏,那么如何恢复?正确答案:联机Redo1=1志是Oracle数据库中比较核心的文件,当Redo日志文件异常之后,数据库就无法正常启动,而且有丢失据的风险,强烈建议在条件允许的情况下,对RCdo日志进行多路镜像。需要注意的是,RMAN不能备份联机RCd。日志文件。所以,联机RCdO日志一旦出现故障,则只能进行清除日志了。清除日志文件即表明可以重用该文件。如果日志文件已经归档,那么可以使用:A1.TERDATABASEC1.EAR1.OGFI1.EGROUPN;如果该日志还没有归档,那么需要用:A1.TERDATABASEC1.EARUNARCHIVED1.OGFI1.EGROITN;一不需要数据文件A1.TERDATABASEC1.EARUNARCHIVED1.OGFI1.E.UNRECOVERAB1.EDATAFI1.E:一需要数据文件考点RMAN10. 数据库参数RESOlJRCEjJMlT的作用是什么?正确答案:该参数用房启用或禁用数据库资源限制(通过PROFI1.E设定)。关于RESoURCEjJMIT需要注意以下两点:1)由户所有拥有的PROFI1.E中有关密码的限制永远生效,不受限制。2)用户所有拥有的profile中有关资源的限制与Resourcejjmit参数的设置有关,当为TRUE时生效,当为FA1.SE时(默认值是FA1.SE)无效。在OraCIe12c之前该参数默认为FA1.SE,而从12c开始,该参数默认为TRUE。11. 能否把整个裸设备都作为OraCIe的数据文件?正确答案:不行。必须让数据文件的大小稍微小于该裸设备的实际大小,一般来说,至少要空出两个Orac1e块的大小。考点裸设备(RAW)12. 数据库安全包括哪两层含义?正确答案:数据库安全包括两层含义:第一层是指系统运行安全,例如,一些网络不法分子通过网络、局域网等途径入侵计算机使系统无法正常启动,或超负荷让服务器运行大量算法,并关闭CPU风扇,使CPU过热烧坏等破坏性活动;第二层是指系统信息安全,例如,黑客对数据库入侵,并盗取想要的资料。数据库系统的安全特性主要是针对数据而言的,包括数据独立性、数据安全性、数据完整性、并发控制、故障恢复等几个方面。考点数据库安全13. 如何监控TEMP和UndO表空间并将耗费TEMP和Undo空间非常大的SQ1.语句记录下来?正确答案:总体思路是采用JOB定时将耗费TEMP和Indo的SQ1.语句记录在表中,这样日后查询将是非常方便的。考点性能诊断14. RAC等待事件gcbufferbusyacquire和gcbufferbusyrelease的区别是什么?正确答案:gcbufferbusy是RAC数据库中常见的等待事件,从OraCIeIIg开始gcbufferbusy分为gcbufferbusyacquire和gcbufferbusyreleasegcbufferbusyacquire是当会话1尝试请求访问远程实例上的数据块,但是在会话1之前己经有相同实例上另外一个会话2请求访问了相同的数据块,并且没有完成,那么会话1等待gcbufferbusyacquire。gcbufferbusyrelease是在会话1之前已经有远程实例的会话2请求访问了相同的数据块,并且没有完成,那么会话1等待gcbufferbusyrelease。考点RAC15. Oracle的表可以分为哪儿类?正确答案:从理论上来讲,不存在一种能够满足所有读取要求的数据存储方式,所以,Oracle设计了大约5种数据的存储格式,详见卜.表。修S<(HaPTable)全魄分区表蚓鼬袤(IOT)t«的-tt的旗明,t蚣故就!合适帆方,m以某腌宅来也凡存献,m全H细表又分力奸会话的全局小时的全脑时表郛,施行分区忌酶上,a潞是T完醐表,雕麻中的雕在蝌上腌碰到豺制晦艇文件匕s&mn.不至于吊次祖惧憾表,Onde可以界大越紧;I分就干个里上更方使管理的甯分¥郁例朋个分区.郡的摭力分区表知I解成席副表JHEf引Hi勘全amt在崛Wf上的筋松是一个存储嘛遍附的表.它辅跳存碱.m飕三w蝴的外WflWHW-就存骷糊的兼蟒於中.施是隹表.隹表20Ote中一舸侬1«施”的旅,m表P项渺股SUQ改善萌熊表触蜥林的触1)1榭髀於2)适合烧mD嘛诵郭t值动4m)2)产生肋WQX3)相的会Wtti,不产1)做的施趟(施&如可斯聊触黔分区)2)骸的三兄(可以械一个分哪TRIMATE)3)献的记为锵(分区然EXCHANGE,fl表和分区釉架个分区工微出的蛀交换)4)邠摘(SP1.IT)加施合井(MERGE)m翅”引承引影眯,m期表I阿娘夕她期仔2)出3肛出了酰蝌脚蝌系获腌3)节省Htt轴空间,歌蹦曲丽多薇表,赫毂轴蜥a作为共物来何(续)分类隧域(HOPIW全剧恻表分区表*三O(IOT)隹衣缺点1)更却抑眼大2)DE1.ETE无法触州(麻/下阳3)表巳求太X.4) 一引国麹5) 5Pft(三,电朝假MW,1)硒M2)励附D诵法妹2)分区过多对系维有一定的瞬I3)联个含有MBtK断IWJNCATE、DROPit作胎微全琳引精I)麟妹2)殊腌以Dam2)表就开瞅黔球适合大需腌计频酷接口搬计龄H志表,林炀表某黜舶我期赚关额嫡多表字真IfiH(DBAlB1.ES)SHKTaFROMdba_tablesdWH.ERED.IOT_mvrAM)D.TEMPORARY=NANDdPAR-1111ONED=NO,ANDd,CU三R,NAMEISNUU:"SE1.ECTUT.TAB1.E.NAME,DECODE(UrDuRATl0N,SY三SW会苗被:1SYSSTRANSAcnON;修圾)在K表翅FROMDBAjAB1.ESVrWHEREUT.TEMPO-RARY=Y;SE1.ECTDPARrniONED.D.OWNERDTAB1.E_NAMEJ).TAB1.E_1.0Cla)JOTJTreId.temporaryfromdba_TAB1.ESD三REDfART.11K三D=YES':SE1.ECTFROMDB.VUB1.ESDWH-ERED.10T.TY-PE<10T;SaEeTD.iable_nameDrU啊岫(EDrbistrwnerFROMDBAJAB1.EDWIOED.Ol三R.NEENoTNIl1.从上衣中可以看出,没有最好的技术,只有最合适的技术。考点对象16. Oracle数据库的介质恢其包含哪两个过程?正确答案:介质恢复是基于物理备份恢复数据,它是OraCIe数据库出现介质故障时恢复的重要保障。介质恢复包括块恢复、数据文件恢复、表空间恢复和整个数据库的恢复。介质恢复主要是针对错误类型中的介质失败,如果此少量的块失败,那么可以使用介质恢复中的块恢复来快速修复:但如果是其他情况的丢失,那么需要根据具体情况,可使用数据文件恢复、表空间恢复甚至全库恢复。Oracle数据库的介质恢复实际上包含门两个过程:数据库还原(RESTORE)与数据库恢复(RECoVER),具体如下:1)数据库还原是指利用备份的数据库文件来替换已经损坏的数据库文件或者将其恢复到一个新的位置。RVAN在进行还原操作时,会利用恢复目录(有建立恢熨目录的话就使用目标数据库的控制文件)来获取备份信息,并从中选择最合适的备份进行修货操作。当选择备份时,有以下两个原则:选择距离恢竟目录时刻最近的备份;优先选择镜像复制,其次才是备份集。2)数据库恢复是指数据文件的介质恢夏,即为修复后的数据文件应用联机或归档口志,从而将修复的数据库文件更新到当前时刻或指定时刻下的状态。在执行恢复数据库时,需要使用RECOVER命令。还原是将某个时间点的数据文件的副本再拷贝回去,还原后的数据库处于不一致的状态,或不是最新的状态,还需要执行恢复操作。恢复就是使用归档日志文件和联机RedoH志文件将不一致的数据库应用到一致性状态。需要注意的是,还原只是建立在数据库备份的基础版本上,例如,如果数据库备份包括0级备份和很多1级备份,还原只是应用0级备份,恢熨过程会根据情况自动应用1级备份或Redo日志将数据库恢妥到一致性的状态。考点RMAN17. 会话游标有哪些属性?正确答案:会话游标有4个属性,见下表。属性类型简介最近的FETCH是否提取到数据,表示一条SQ1.语句被执行适用对象适用SQ1.SQ1.%FOUND布尔成功后受其影响而改变的记录数是否大于或等于1,若是则赋值隐式游标、型布SQINOTFOUND尔为TRUE,否则为FA1.SE。在一条DM1.语句被执行前,SQ1.MX)UND的值是NU1.1.最近的FETCH是否没有提取到数据,表示一-条SQ1.语句被执行成功后受其影响而改变的记录数是否为0,若是则赋值为dJ¼wf,J'隐式游标、显式游标隐式游标、显式游标INSERT.DE1.ETE、UPDATE、SE1.ECT.INTO.SQ1.%ROWCOUNT型数值TRUE,否则为FA1.SE。在一条DM1.语句被执行前,SQ1.NOTFOUND的值是NU1.1.表示最近的一条SQ1.语句成功执行后受其影响而改变的记型录的数最,后续执行的SQ1.会覆盖SQ1.%ROWCOUNT的值布游标是否打开,当游标打开时返回型言,SQ1.fISOPEN的值永远是FA1.SESQ1.%ISOPEN尔TRUEo对于隐式游标而显式游标当执行一条DM1.语句后,DMI.语句的结果保存在这4个游标属性中,这些属性用于控制程序流程或者了解程序的状态。当运行DM1.语句时,P1./SQ1.打开一个内建游标并处理结果。在这些属性中,sql%found和sol%m)tfoind是布尔值,SQIROWCO1.NT是整数值。需要注意的是,若游标属于隐式游标,则在P1./SO1.中可以直接使用上表中的属性:若游标属于显式游标,则上表中的属性里“SQ1.%”需要替换为自定义显式游标的名称。上表中的这4个属性对于动态游标依然适用。考点游标18. COCNT(I)比COUNT(*)在执行效率上要快吗?正确答案:错。COUNT(I)和COUNT(*)在执行效率上是一样的。COUNTo函数是OraeIe中的聚合函数,用于统计结果集的行数。其语法形式如卜丁COUNT(*:DISTINCT1.1.expr)OVER(analytic_clause)可以把COUM'的使用情况分为以下3类:DCOUNT(I).COUNT(*).COUNT(常量)、COUvr(主键)、CoUNT(ROWID)、COUNT(非空列)。2) COUNT(允许为空列).3)COUNT(DISTlNcT列名)。下面分别从查询结果和效率方面做个比较。1 .结果区别I)COUNT、COUNT(*).COUNT(ROWID)、COUNT(常量)、COUyr(主键)、COUNT(非空歹Q这几种方式统计的行数是表中所有存在的行的总数,包括值为NU1.1.的行和非空行。所以,这几种方式的执行结果相同。这里的常量可以为数字或字符串,例如,COUNT(2).COUNT(333).COUNTCx,).COUNTCxiaomaimiao,)需要注意的是,这里的COUNT(I)中的“1”并不表示表中的第一列,它其实是一个表达式,可以换成任意数字、字符或表达式。2)COUNT(允许为空列1这种方式统计的行数不会包括字段值为NU1.1.的行。3) COUNT(DISTINCT列名)得到的结果是除去值为NU1.1.和重复数据后的结果。4) “SE1.ECTCoUNT("),COUNT(NU1.1.)FROMT_COUNT_1.HR;w返回0行。5) 效率、索引1)如果存在主键或非空列上的索引,那么COUNT、COUNT(*).COUNT(ROWTD),COUNT(常量)、COnT(主键)、COUNT(非空列)会首先选择主键上的索引快速全扫描(INDEXFASTFU1.1.SCAN)。若主键不存在则会选择非空列上的索引。若非空列上没有索引则肯定走全表扫描全AB1.EACCESSFU1.1.)0其中,COUNT(ROWID)在走索引的时候比其他几种方式要慢。通过10053事件可以看到这几种方式除了COUMl(ROWlD)之外,其他最终都会转换成Co1.NT(*)的方式来执行。需要注意的是,在以下几种情况下,OraCIe会选择全表扫描:主键索引或非空列上的索引所占用的块数比表的块数大,此时选择全表扫描的CoST会比选择索引的CoST小,所以,OraCle会选择全表扫描。当索引碎片过多、收集式的统计信息与收集索引的统计信息之间隔了很久,或手动使用DBVS_STATS包不正确地设置了表或索引的统计信息的时候,可能会出现这种情况。但是,在一般情况下不会出现这种情况,所以需要及时地、正确地收集统计信息。主键索引或非空列上的索引处于无效状态。在此种情况下,OraCle必然选择全表扫描。2)对于COUNT(CO1.I)来说,只要列字段上有索引则会选择索引快速全扫描。而对于“SE1.ECTCO1.l,来说,除非列上有NOTNU1.1.约束,否则执行计划会选择全表扫描。3)对于COUNT(列)来说,随着列的偏移位置越大,CoUyr(列)的速度越来越慢。在设计表时,把经常访问的列尽量设计在表的前几列。4)C(MJNT(DISTlNCT列名)若列上有索引,且有非空约束或在WHEREF句中使用ISNOTNU1.1.,则会选择索引快速全扫描。其余情况选择全点扫描。考点SQ1.优化19. 用一个语句实现该需求:如果某条记录存在那么就执行更新操作,如果不存在那么就执行插入操作。正确答案:可以采用MERGE语句,但是只支持SE1.ECT子查询.语法为MERGEINTOTAB1.EUSINGDATASOURCEON(CONDITION)WHENMATCHEDTHENUPDATEC1.AUSEWHENNOTMATCHEDTHENINSERT_C1.AUSE: