




免费预览已结束,剩余26页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
对ORACLE数据库的一些认识摘 要本文主要讲述了ORACLE数据库的一些基本概念、Oracle10g的安装,SQL文的性能及Oracle 数据库操纵,安全管理及备份与恢复性能优化等ORACLE数据库的各项知识。本文作为学习Oracle的一份总述性资料,不求全文的结构合理、语句的优美,只在乎知识点的全面性、可再读性。一、 关键词:ORACLE概念、安装、SQL文的性能、备份二、 Oracle的一些基本概念1.1理解ORACLE实例1.1.1ORACLE SERVER一个运行着的ORACLE数据库就可以看成是一个ORACLE SERVER,该SERVER由数据库(Database)和实例(Instance)组成,在一般的情况下一个ORACLE SERVER包含一个实例和一个与之对应的数据库。一系列物理文件(数据文件,控制文件,联机日志等)的集合或与之对应的逻辑结构(表空间,段等)被称为数据库,简单的说,就是一系列与磁盘有关系的物理文件的组成。ORACLE内存结构和后台进程被成为数据库的实例,一个实例最多只能安装(Mount)和打开(Open)在一个数据库上,负责数据库的相应操作并与用户交互。实例与数据库的关系如下图所示:图一 ORACLE SERVER1.1.2ORACLE内存结构 (Memory structure)a) 内存结构的组成Oracle内存结构主要可以分共享内存区与非共享内存区,共享内存区主要包含SGA(System Global Area),非共享内存区主要由PGA(Program Global Area)组成,可以用如下图形表示。图二 ORACLE MEMOERY STRUCTRUE2) 全局共享区System Global Area(SGA) System Global Area 是一块巨大的共享内存区域,他被看做是Oracle 数据库的一个大缓冲池,这里的数据可以被ORACLE的各个进程共用。3) 共享池(Shared pool)共享池是SGA中最关键的内存片段,特别是在性能和可伸缩性上。一个太小的共享池会扼杀性能,使系统停止,太大的共享池也会有同样的效果,将会消耗大量的CPU来管理这个共享池。不正确的使用共享池只会带来灾难。共享池主要又可以分为以下两个部分:1、SQL语句缓冲(Library Cache)2、数据字典缓冲区(Data Dictionary Cache)1.1.3 后台进程 (Background process)后台进程是Oracle的程序,用来管理数据库的读写,恢复和监视等工作。Server Process主要是通过他和user process进行联系和沟通,并由他和user process进行数据的交换。在Unix机器上,Oracle后台进程相对于操作系统进程,也就是说,一个Oracle后台进程将启动一个操作系统进程;在Windows机器上,Oracle后台进程相对于操作系统线程,打开任务管理器,我们只能看到一个ORACLE.EXE的进程,但是通过另外的工具,就可以看到包含在这里进程中的线程。Oracle系统有5 个基本进程他们是:l DBWR(数据文件写入进程):将修改过的数据缓冲区的数据写入对应数据文件,维护系统内的空缓冲区。l LGWR(日志文件写入进程):将重做日志缓冲区的数据写入重做日志文件。l SMON(系统监护进程) :工作主要包含:清除临时空间,在系统启动时,完成系统实例恢复,聚结空闲空间,从不可用的文件中恢复事务的活动,OPS中失败节点的实例恢复等。l PMON(用户进程监护进程):主要用于清除失效的用户进程,释放用户进程所用的资源。l CKPT(检查点进程,同步数据文件, 日志文件,控制文件):同步数据文件,日志文件和控制文件,由于DBWR/LGWR的工作原理,造成了数据文件,日志文件,控制文件的不一至,这就需要CKPT进程来同步。CKPT会更新数据文件/控制文件的头信息。1.2 ORACLE的物理结构1) 数据文件每一个ORACLE数据库有一个或多个物理的数据文件(data file)。一个数据库的数据文件包含全部数据库数据。逻辑数据库结构(如表、索引)的数据物理地存储在数据库的数据文件中。数据文件有下列特征:l 一个数据文件仅与一个数据库联系。l 一旦建立,数据文件不能改变大小l 一个表空间(数据库存储的逻辑单位)由一个或多个数据文件组成。 数据文件中的数据在需要时可以读取并存储在ORACLE内存储区中。例如:用户要存取数据库一表的某些数据,如果请求信息不在数据库的内存存储区内,则从相应的数据文件中读取并存储在内存。当修改和插入新数据时,不必立刻写入数据文件。为了减少磁盘输出的总数,提高性能,数据存储在内存,然后由ORACLE后台进程DBWR决定如何将其写入到相应的数据文件。2) 日志文件每一个数据库有两个或多个日志文件(redo log file)的组,每一个日志文件组用于收集数据库日志。日志的主要功能是记录对数据所作的修改,所以对数据库作的全部修改是记录在日志中。在出现故障时,如果不能将修改数据永久地写入数据文件,则可利用日志得到该修改,所以从不会丢失已有操作成果。日志文件主要是保护数据库以防止故障。为了防止日志文件本身的故障,ORACLE允许镜象日志(mirrored redo log),以致可在不同磁盘上维护两个或多个日志副本。日志文件中的信息仅在系统故障或介质故障恢复数据库时使用,这些故障阻止将数据库数据写入到数据库的数据文件。然而任何丢失的数据在下一次数据库打开时,ORACLE自动地应用日志文件中的信息来恢复数据库数据文件。3) 控制文件每一ORACLE数据库有一个控制文件(control file),它记录数据库的物理结构,包含下列信息类型:l 数据库名;l 数据库数据文件和日志文件的名字和位置;l 数据库建立日期。l 为了安全起见,允许控制文件被镜象。每一次ORACLE数据库的实例启动时,它的控制文件用于标识数据库和日志文件,当着手数据库操作时它们必须被打开。当数据库的物理组成更改时,ORACLE自动更改该数据库的控制文件。数据恢复时,也要使用控制文件。1.3 逻辑结构数据库逻辑结构包含表空间、段、范围(extent)、数据块和模式对象。(1) 表空间一个数据库划分为一个或多个逻辑单位,该逻辑单位称为表空间(TABLESPACE)。一个表空间可将相关的逻辑结构组合在一起。DBA可利用表空间作下列工作:l 控制数据库数据的磁盘分配。l 将确定的空间份额分配给数据库用户。l 通过使单个表空间在线或离线,控制数据的可用性。l 执行部分数据库后备或恢复操作。l 为提高性能,跨越设备分配数据存储。每个数据库可逻辑划分为一个或多个表空间。每一个表空间是由一个或多个数据文件组成,该表空间物理地存储表空间中全部逻辑结构的数据。每一个ORACLE数据库包含有一个名为SYSTEM的表空间,在数据库建立是自动建立。在该表空间中总包含有整个数据库的数据字典表。ORACLE数据库中一表空间是由一个或多个物理数据文件组成,一个数据文件只可与一个表空间想联系。当为一表空间建立一数据文件时,ORACLE建立该文件,分配指定的磁盘空间容量。在数据文件初时建立后,所分配的磁盘不包含任何数据。表空间可以在线或离线。在ORACLE中还允许单独数据文件在线或离线。(2) 段、范围和数据块ORACLE通过段、范围和数据块逻辑数据结构可更细地控制磁盘空间的使用。段段(SEGMENT)包含表空间中一种指定类型的逻辑存储结构,是由一组范围组成。在ORACLE数据库中有几种类型的段:数据段、牵引段、回滚段和临时段。数据段:对于每一个非聚集的表有一数据段,表的所有数据存放在该段。每一聚集有一个数据段,聚集中每一个表的数据存储在该段中。索引段:每一个索引有一索引段,存储索引数据。回滚段:是由DBA建立,用于临时存储要撤消的信息,这些信息用于生成读一致性数据库信息、在数据库恢复时使用、回滚未提交的事务。临时段:当一个SQL语句需要临时工作区时,由ORACLE建立。当语句执行完毕,临时段的范围退回给系统。ORACLE对所有段的空间分配,以范围为单位。范围一个范围(EXTENT)是数据库存储空间分配的一个逻辑单位,它由连续数据块所组成。每一个段是由一个或多个范围组成。当一段中间所有空间已完全使用时,ORACLE为该段分配一个新的范围。为了维护的目的,在数据库的每一段含有段标题块(segment header block)说明段的特征以及该段中的范围目录。数据块数据块(data block)是ORACLE管理数据文件中存储空间的单位,为数据库使用的I/O的最小单位,其大小可不同于操作系统的标准I/O块大小。数据块的格式:公用的变长标题表目录行目录未用空间行数据(3) 模式和模式对象一个模式(schema)为模式对象(scehma object)的一个集合,每一个数据库用户对应一个模式。模式对象为直接引用数据库数据的逻辑结构,模式对象包含如表、视图、索引、聚集、序列、同义词、数据库链、过程和包等结构。模式对象是逻辑数据存储结构,每一种模式对象在磁盘上没有一个相应文件存储其信息。一个模式对象逻辑地存储在数据库的一个表空间中,每一个对象的数据物理地包含在表空间的一个或多个数据文件中。表表(table)为数据库中数据存储的基本单位,其数据按行、列存储。每个表具有一表名和列的集合。每一列有一个列名、数据类型、宽度或精度、比例。一行是对应单个记录的列信息的集合。视图一个视图(view)是由一个或多个表(或其他视图)中的数据的一种定制的表示,是用一个查询定义,所以可认为是一个存储的查询(stored query)或是一个虚表(virtual table)。视图可在使用表的许多地方使用。聚集聚集(cluster)是存储表数据的可选择的方法。一个聚集是一组表,将具有同一公共列值的行存储在一起,并且它们经常一起使用。这些公共列构成聚集码。例如:EMP表各DEPT表共享DEPTNO列,所以EMP表和DEPT表可聚集在一起,聚集码的列为DEPTNO列,该聚集将每个部门的全部职工行各该部门的行物理地存储在同一数据块中。索引索引(index)是与表和聚集相关的一种选择结构。索引是为提高数据检索的性能而建立,利用它可快速地确定指定的信息。ORACLE索引为表数据提供快速存取路径。索引适用于一范围的行查询或指定行的查询。在建立索引时,将在表空间自动地建立一索引段,索引段空间分配和保留空间的使用受下列方式控制:索引段范围的分配常驻该索引段的存储参数控制。其数据块中未用空间可受该段的PCTFREE参数设置所控制。序列生成器序列生成器(sequence generator)产生序列号。在多用户环境下该序列生成器特别有用,可生成各返回序列号而不需要磁盘I/O或事务封锁。同义词一个同义词(synonym)为任何表、视图、快照、序列、过程、函数或包的别名,其定义存储在数据字典中。同义词因安全性和方便原因而经常使用,可用于:l 可屏蔽对象的名字及其持有者。l 为分布式数据库的远程对象提供位置透明性。l 为用户简化SQL语句。杂凑杂凑(hashing)是存储表数据一种可选择的方法,用以改进数据检索的性能。要使用杂凑,就要建立杂凑聚集,将表装入到该聚集。在骠凑聚集中的表行根据杂凑函数的结果进行物理学存储和检索。杂凑函数用于生成一个数值的分布,该数值称为杂凑值,它是基于指定的聚集码值。程序单元程序单元(program unit)是指存储过程、函数和包(PACKAGE)。一个过程和函数,是由SQL语句和PL/SQL语句组合在一起,为执行某一个任务的一个可执行单位。一个过程或函数可被建立,在数据库中存储其编译形式,可由用户或数据库应用所执行。过程和函数差别在函数总返回单个值给调用者,而过程没有值返回给调用者。包提供相关的过程、函数、变量和其它包结构封装起来并存贮在一起的一种方法,允许管理者和应用开发者利用该方法组织如此的程序(routine),来提供更多的功能和提高性能。数据库链数据库链是一个命名的对象,说明从一数据库到另一数据库的一路径(PATH)。在分布式数据库中,对全局对象名引用时,数据库链隐式地使用。三、 Oracle的安装Oracle10g以下版本的卸载:因为我的机子上原来装有Oracle92,在安装Oracle10前,我卸载Oracle92,因为当时忘了截图,在这里写下步骤:1) 打开Windows的“服务”窗口,将Oracle10g以下版本的全部服务都停止掉,并且将服务的“启动类型”都设置成“手动”,接着关闭Windows的“服务”窗口,按照下面的步骤进行操作。2) 删除Oracle10g以下版本所建立的所有数据库(通过Oracle10g以下版本的Database Configuration Assistant工具完成,如果忘记sys数据库管理员的密码,请先将原来在%ORACLE_HOME%database目录下的PWDXXXX.ORA密码文件改名,然后在Windows命令行中通过Oracle提供的orapwd工具重新创建上述文件,其中XXXX表示数据库的SID);3) 删除Oracle10g以下版本的全部软件(通过Oracle10g以下版本的Universal Installer工具完成,如果原先没有安装该工具,可以启动Oracle10g的安装向导来完成该卸载任务);4) 删除Oracle10g以下版本在注册表中的相关项(即整个HKEY_LOCAL_MACHINESOFTWAREORACLE项,如果还有其它Oracle公司的软件,例如Form,并且不想重新安装的,那么请不要删除整个ORACLE项,但要确保删除所有包含旧版本Oracle的信息项,建议重新安装这些软件);5) 删除Oracle10g以下版本的监听服务,方法是直接从注册表中删除(HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices);6) 删除%ORACLE_BASE%目录下隶属于Oracle10g以下版本所使用的所有子目录(一般包括 admin、Ora9i和oradata)和文件,注意如果还有Oracle公司的其它软件(例如Form),那么这些软件一般也安装在%ORACLE_BASE%目录下,如果不想重新安装这些软件,请不要删除这些目录,建议和注册表一样删除重新安装;7) 删除系统盘下关于Oracle Universal Installer的整个目录(一般是C:Program FilesOracle目录);上述操作全部完成后,重新启动机器。Oracle10安装输入初期创建的数据库的密码。单击下一步。接下来点击下一步,基本就可以安装好了(忘了截图)。这样在安装好Oracle10的同时,创建好了一个名为Oral的数据库。四、 创建Oracle数据库数据库的创建可以通过Database Configuration Assistant工具来完成 Database Configuration Assistant,会出现以下画面 选择上述画面中的“下一步”按钮,会出现以下画面 选择上述画面中的“下一步”按钮,会出现以下画面,选择如画面所示 选择上述画面中的“下一步”按钮,会出现以下画面,按照实际情况输入 选择上述画面中的“下一步”按钮,会出现以下画面如果计划不使用Oracle的OEM工具来管理该数据库,那么建议不要选择以下画面中的“使用Enterprise Manager配置数据库”选项,在该版本中Oracle提供了通过Web页面来管理和监控自身或远程数据库服务器的功能,不过该功能的启用需要在后续画面中安装相关的功能组件来实现,并且会增加数据库服务器的资源开销 选择上述画面中的“下一步”按钮,会陆续出现以下画面,请根据实际需要自行选择相关选项 最后安装,会出现以下画面,安装成功!五、 数据库用户对象管理4.1 ORACLE数据库的模式对象的管理与维护ORACLE数据库的模式对象包括:表空间、表、视图、索引、序列、同义词、聚集和完整性约束。对于每一个模式对象,首先描述了它的定义,说明了它的功能,最后以基于SQL语言的实例说明如何对它们进行管理于维护。4.1.1 表空间由于表空间是包含这些模式对象的逻辑空间,有必要先对它进行维护。l 创建表空间:SQLCREATE TABLESPACE jxzyDATAFILE /usr/oracle/dbs/jxzy.dbfONLINE;l 修改表空间:SQLALTER TABLESPACE jxzy OFFLINE NORMAL;SQLALTER TABLESPACE jxzyRENAME DATAFILE /usr/oracle/dbs/jxzy.dbfTO /usr/oracle/dbs/jxzynew.dbfONLINESQLCREATE TABLESPACE jxzy ONLINEl 删除表空间:SQLDROP TABLESPACE jxzyINCLUDING CONTENTS4.1. 2 表维护表是数据库中数据存储的基本单位,一个表包含若干列,每列具有列名、类型、长度等。l 表的建立:SQLCREATE TABLE jxzy.switch(OFFICE_NUM NUMBER(3,0) NOT NULL,SWITCH_CODE NUMBER(8,0) NOT NULL,SWITCH_NAME VARCHAR2(20) NOT NULL);l 表的修改:SQLALTER TABLE jxzy.switchADD (DESC VARCHAR2(30);l 表的删除:SQLDROP TABLE jxzy.switchCASCADE CONSTRAINTS/删除引用该表的其它表的完整性约束4.1. 3 视图维护视图是由一个或若干基表产生的数据集合,但视图不占存储空间。建立视图可以保护数据安全(仅让用户查询修改可以看见的一些行列)、简化查询操作、保护数据的独立性。l 视图的建立:SQLCREATE VIEW jxzy.pole_well_view AS(SELECT pole_path_num AS path,pole AS device_num FROM poleUNIONSELECT pipe_path_num AS path, well AS device_num FROM well);l 视图的替换:SQLREPLACE VIEW jxzy.pole_well_view AS(SELECT pole_path_num AS path,pole AS support_device FROM poleUNIONSELECT pipe_path_num AS path,well AS support_device FROM well);l 视图的删除:SQLDROP VIEW jxzy.pole_well_view;4.1.4 序列维护序列是由序列发生器生成的唯一的整数。l 序列的建立:SQLCREATE SEQUENCE jxzy.sequence_cableSTART WITH 1INCREMENT BY 1NO_MAXVALUE;建立了一个序列,jxzy.sequence_cable.currval返回当前值,jxzy.sequence_cable.nextval 返回当前值加1后的新值l 序列的修改:SQLALTER SEQUENCE jxzy.sequence_cableSTART WITH 1 /起点不能修改,若修改,应先删除,然后重新定义INCTEMENT BY 2MAXVALUE 1000;l 序列的删除:SQLDROP SEQUENCE jxzy.sequence_cable4.1. 5 索引维护索引是与表相关的一种结构,它是为了提高数据的检索速度而建立的。因此,为了提高表上的索引速度,可在表上建立一个或多个索引,一个索引可建立在一个或几个列上。l 索引的建立:SQLCREATE INDEX jxzy.idx_switchON switch(switch_name)TABLESPACE jxzy;l 索引的修改:SQLALTER INDEX jxzy.idx_switchON switch(office_num,switch_name)TABLESPACE jxzy;l 索引的删除:SQLDROP INDEX jxzy.idx_switch;4.1. 6 完整性约束管理数据库数据的完整性指数据的正确性和相容性。数据完整型检查防止数据库中存在不符合语义的数据。完整性约束是对表的列定义一组规则说明方法。ORACLE提供如下的完整性约束.a. NOT NULL 非空b. UNIQUE 唯一关键字c. PRIMATY KEY 主键一个表只能有一个,非空d. FOREIGA KEY 外键e.CHECK 表的每一行对指定条件必须是true或未知(对于空值)例如:l 某列定义非空约束:SQLALTER TABLE office_organizationMODIFY(desc VARCHAR2(20)CONSTRAINT nn_desc NOT NULL)l 某列定义唯一关键字:SQLALTER TABLE office_organizationMODIFY(office_name VATCHAR2(20)CONSTRAINT uq_officename UNIQUE)l 定义主键约束,主键要求非空:SQLCREATE TABLE switch(switch_code NUMBER(8)CONSTRAINT pk_switchcode PRIMARY KEY,)l 使主键约束无效:SQLALTER TABLE switch DISABLE PRIMARY KEYl 定义外键:SQLCREATE TABLE POLE(pole_code NUMBER(8),office_num number(3)CONSTRAINT fk_officenumREFERENCES office_organization(office_num)ON DELETE CASCADE);l 定义检查:SQLCREATE TABLE office_organization(office_num NUMBER(3),CONSTRAINT check_officenumCHECK (office_num BETWEEN 10 AND 99);4.2 ORACLE数据库用户与权限管理ORACLE是多用户系统,它允许许多用户共享系统资源。为了保证数据库系统的安全,数据库管理系统配置了良好的安全机制。4.2. 1 ORACLE数据库安全策略l 建立系统级的安全保证:系统级特权是通过授予用户系统级的权利来实现,系统级的权利(系统特权)包括:建立表空间、建立用户、修改用户的权利、删除用户等。系统特权可授予用户,也可以随时回收。ORACLE系统特权有80多种。l 建立对象级的安全保证:对象级特权通过授予用户对数据库中特定的表、视图、序列等进行操作(查询、增、删改)的权利来实现。l 建立用户级的安全保证:用户级安全保障通过用户口令和角色机制(一组权利)来实现。引入角色机制的目的是简化对用户的授权与管理。做法是把用户按照其功能分组,为每个用户建立角色,然后把角色分配给用户,具有同样角色的用户有相同的特权。4.2.2 用户管理ORACLE用户管理的内容主要包括用户的建立、修改和删除l 用户的建立SQLCREATE USER jxzyIDENTIFIED BY jxzy_passwordDEFAULT TABLESPACE systemQUATA 5M ON system; /供用户使用的最大空间限额l 用户的修改SQLCREATE USER jxzyIDENTIFIED BY jxzy_pwQUATA 10M ON system;l 删除用户及其所建对象SQLDROP USER jxzy CASCADE; /同时删除其建立的实体4.2.3系统特权管理与控制ORACLE 提供了80多种系统特权,其中每一个系统特权允许用户执行一个或一类数据库操作。l 授予系统特权:SQLGRANT CREATE USER,ALTER USER,DROP USERTO jxzy_newWITH ADMIN OPTION;l 回收系统特权:SQLREVOKE CREATE USER,ALTER USER,DROP USERFROM jxzy_new/但没有级联回收功能l 显示已被授予的系统特权(某用户的系统级特权):SQLSELECT*FROM sys.dba_sys_privs4.2.4 对象特权管理与控制ORACLE对象特权指用户在指定的表上进行特殊操作的权利。这些特殊操作包括增、删、改、查看、执行(存储过程)、引用(其它表字段作为外键)、索引等。l 授予对象特权:SQLGRANT SELECT,INSERT(office_num,office_name),UPDATE(desc)ON office_organizationTO new_adminidtratorWITH GRANT OPTION;l 回收对象特权:SQLREVOKE UPDATE ON office_orgaizationFROM new_administratorl 显示已被授予的全部对象特权:SQLSELECT*FROM sys.dba_tab_privs4.2.5 角色的管理ORACLE的角色是命名的相关特权组(包括系统特权与对象特权),ORACLE用它来简化特权管理,可把它授予用户或其它角色。ORACLE数据库系统预先定义了CONNECT 、RESOURCE、 DBA、 EXP_FULL_DATABASE、 IMP_FULL_DATABASE五个角色。CONNECT具有创建表、视图、序列等特权;RESOURCE具有创建过程、触发器、表、序列等特权、DBA具有全部系统特权;EXP_FULL_DATABASE、 IMP_FULL_DATABASE具有卸出与装入数据库的特权。通过查询sys.dba_sys_privs可以了解每种角色拥有的权利。l 授予用户角色SQLGRANT DBA TO new_administractorWITH GRANT OPTION;六、 SQL文的性能写语句的经验: 1) 对于大表的查询使用索引2) 少用in,exist等3) 使用集合运算4) 对于大表查询中的列应尽量避免进行诸如To_char,To_date,To_number等转换.5) 有索引的尽量用索引,有用到索引的条件写在前面,如有可能和有必要就建立一些索引6) 尽量避免进行全表扫描,限制条件尽可能多,以便更快一、搜索到要查询的数据人们在使用SQL时往往会陷入一个误区,即太关注于所得的结果是否正确,而忽略了不同的实现方法之间可能存在的性能差异。在工作实践中可以发现,不良的SQL往往来自于不恰当的索引设计、不充份的连接条件和不可优化的where子句。在对它们进行适当的优化后,其运行速度有了明显地提高!下面从这三个方面分别进行总结:为了更直观地说明问题,所有实例中的SQL运行时间均经过测试,不超过秒的均表示为(,=, =)和order by、group by发生的列,可考虑建立群集索引;l 经常同时存取多列,且每列都含有重复值可考虑建立组合索引;l 组合索引要尽量使关键查询形成索引覆盖,其前导列一定是使用最频繁的列。二、SQL的执行情况:例:表card有7896行,在card_no上有一个非聚集索引,表account有191122行,在 account_no上有一个非聚集索引,试看在不同的表连接条件下,两个SQL的执行情况:select sum(a.amount) from account a, card b where a.card_no = b.card_no(20秒)将SQL改为:select sum(a.amount) from account a, card b where a.card_no = b.card_no and a.account_no=b.account_no( 1秒)分析:在第一个连接条件下,最佳查询方案是将account作外层表,card作内层表,利用card上的索引,其I/O次数可由以下公式估算为:外层表account上的22541页+(外层表account的191122行*内层表card上对应外层表第一行所要查找的3页)=595907次I/O在第二个连接条件下,最佳查询方案是将card作外层表,account作内层表,利用account上的索引,其I/O次数可由以下公式估算为:外层表card上的1944页+(外层表card的7896行*内层表account上对应外层表每一行所要查找的4页)= 33528次I/O可见,只有充份的连接条件,真正的最佳方案才会被执行。总结:多表操作在被实际执行前,查询优化器会根据连接条件,列出几组可能的连接方案并从中找出系统开销最小的最佳方案。连接条件要充份考虑带有索引的表、行数多的表;内外表的选择可由公式:外层表中的匹配行数*内层表中每一次查找的次数确定,乘积最小为最佳方案。查看执行方案的方法- 用set showplanon,打开showplan选项,就可以看到连接顺序、使用何种索引的信息;想看更详细的信息,需用sa角色执行dbcc(3604,310,302)。三、不可优化的where子句例1:下列SQL条件语句中的列都建有恰当的索引,但
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教师招聘之《幼儿教师招聘》考前冲刺练习试题含答案详解(黄金题型)
- 股票池维护工具创新创业项目商业计划书
- 2025年教师招聘之《幼儿教师招聘》每日一练试卷附参考答案详解【综合题】
- 2025年教师招聘之《幼儿教师招聘》通关练习题库包带答案详解(典型题)
- 2025年教师招聘之《小学教师招聘》考前冲刺练习题库a4版附答案详解
- 教师招聘之《小学教师招聘》复习提分资料含答案详解(b卷)
- 教师招聘之《幼儿教师招聘》能力检测试卷附答案详解(突破训练)
- 水文环境要素的无人同步实时测量技术
- 押题宝典教师招聘之《小学教师招聘》模考模拟试题【各地真题】附答案详解
- 2025年教师招聘之《幼儿教师招聘》预测试题及参考答案详解(黄金题型)
- 学生实习家长知情同意书(完美版)
- 涉警网络负面舆情应对与处置策略
- 《英国政党制度》课件
- 幽门螺杆菌检测报告
- 农业经理人(中级)技能理论考试复习题库(含答案)
- 义务教育阶段中小学学生转学申请表
- 高速公路工程电子招标标准施工招标文件(2022年试行版)
- 云南省临沧县富康河铜矿勘探项目环评报告
- 公司档案分类方案
- 茶学概论-第一章-茶的起源与传播(2学时)课件
- 宋小宝小品《碰瓷》完整台词
评论
0/150
提交评论