分享
分销 收藏 举报 申诉 / 31
播放页_导航下方通栏广告

类型ORACLE概念安装SQL文的性能备份论文.doc

  • 上传人:Fis****915
  • 文档编号:553363
  • 上传时间:2023-12-07
  • 格式:DOC
  • 页数:31
  • 大小:1.09MB
  • 下载积分:6 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    ORACLE 概念 安装 SQL 性能 备份 论文
    资源描述:
    ORACLE概念、安装、SQL文的性能、备份论文 摘 要 本文主要讲述了ORACLE数据库的一些基本概念、Oracle10g的安装,SQL文的性能及Oracle 数据库操纵,安全管理及备份与恢复性能优化等ORACLE数据库的各项知识。本文作为学习Oracle的一份总述性资料,不求全文的结构合理、语句的优美,只在乎知识点的全面性、可再读性。 一、 关键词:ORACLE概念、安装、SQL文的性能、备份 二、 Oracle的一些基本概念 1.1 理解ORACLE实例 1.1.1 ORACLE SERVER 一个运行着的ORACLE数据库就可以看成是一个ORACLE SERVER,该SERVER由数据库(Database)和实例(Instance)组成,在一般的情况下一个ORACLE SERVER包含一个实例和一个与之对应的数据库。 一系列物理文件(数据文件,控制文件,联机日志等)的集合或与之对应的逻辑结构(表空间,段等)被称为数据库,简单的说,就是一系列与磁盘有关系的物理文件的组成。ORACLE内存结构和后台进程被成为数据库的实例,一个实例最多只能安装(Mount)和打开(Open)在一个数据库上,负责数据库的相应操作并与用户交互。 实例与数据库的关系如下图所示: 图一 ORACLE SERVER 1.1.2 ORACLE内存结构 (Memory structure) a) 内存结构的组成 Oracle内存结构主要可以分共享内存区与非共享内存区,共享内存区主要包含SGA(System Global Area),非共享内存区主要由PGA(Program Global Area)组成,可以用如下图形表示。 图二 ORACLE MEMOERY STRUCTRUE 2) 全局共享区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_MACHINE\SOFTWARE\ORACLE项,如果还有其它Oracle公司的软件,例如Form,并且不想重新安装的,那么请不要删除整个ORACLE项,但要确保删除所有包含旧版本Oracle的信息项,建议重新安装这些软件); 5) 删除Oracle10g以下版本的监听服务,方法是直接从注册表中删除(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services); 6) 删除%ORACLE_BASE%目录下隶属于Oracle10g以下版本所使用的所有子目录(一般包括 admin、Ora9i和oradata)和文件,注意如果还有Oracle公司的其它软件(例如Form),那么这些软件一般也安装在%ORACLE_BASE%目录下,如果不想重新安装这些软件,请不要删除这些目录,建议和注册表一样删除重新安装; 7) 删除系统盘下关于Oracle Universal Installer的整个目录(一般是C:\Program Files\Oracle目录); 上述操作全部完成后,重新启动机器。 Oracle10安装 输入初期创建的数据库的密码。单击下一步。 接下来点击下一步,基本就可以安装好了(忘了截图)。这样在安装好Oracle10的同时,创建好了一个名为Oral的数据库。 四、 创建Oracle数据库 数据库的创建可以通过Database Configuration Assistant工具来完成 1. Database Configuration Assistant,会出现以下画面 2. 选择上述画面中的“下一步”按钮,会出现以下画面 3. 选择上述画面中的“下一步”按钮,会出现以下画面,选择如画面所示 4. 选择上述画面中的“下一步”按钮,会出现以下画面,按照实际情况输入 5. 选择上述画面中的“下一步”按钮,会出现以下画面 如果计划不使用Oracle的OEM工具来管理该数据库,那么建议不要选择以下画面中的“使用Enterprise Manager配置数据库”选项,在该版本中Oracle提供了通过Web页面来管理和监控自身或远程数据库服务器的功能,不过该功能的启用需要在后续画面中安装相关的功能组件来实现,并且会增加数据库服务器的资源开销 6. 选择上述画面中的“下一步”按钮,会陆续出现以下画面,请根据实际需要自行选择相关选项 7. 最后安装,会出现以下画面,安装成功! 五、 数据库用户对象管理 4.1 ORACLE数据库的模式对象的管理与维护 ORACLE数据库的模式对象包括:表空间、表、视图、索引、序列、同义词、聚集和完整性约束。对于每一个模式对象,首先描述了它的定义,说明了它的功能,最后以基于SQL语言的实例说明如何对它们进行管理于维护。 4.1.1 表空间 由于表空间是包含这些模式对象的逻辑空间,有必要先对它进行维护。 l 创建表空间: SQL>CREATE TABLESPACE jxzy >DATAFILE ‘/usr/oracle/dbs/jxzy.dbf’ >ONLINE; l 修改表空间: SQL>ALTER TABLESPACE jxzy OFFLINE NORMAL; SQL>ALTER TABLESPACE jxzy >RENAME DATAFILE ‘/usr/oracle/dbs/jxzy.dbf’ >TO ‘/usr/oracle/dbs/jxzynew.dbf’ >ONLINE SQL>CREATE TABLESPACE jxzy ONLINE l 删除表空间: SQL>DROP TABLESPACE jxzy >INCLUDING CONTENTS 4.1. 2 表维护 表是数据库中数据存储的基本单位,一个表包含若干列,每列具有列名、类型、长度等。 l 表的建立: SQL>CREATE TABLE jxzy.switch( >OFFICE_NUM NUMBER(3,0) NOT NULL, >SWITCH_CODE NUMBER(8,0) NOT NULL, >SWITCH_NAME VARCHAR2(20) NOT NULL); l 表的修改: SQL>ALTER TABLE jxzy.switch >ADD (DESC VARCHAR2(30)); l 表的删除: SQL>DROP TABLE jxzy.switch >CASCADE CONSTRAINTS //删除引用该表的其它表的完整性约束 4.1. 3 视图维护 视图是由一个或若干基表产生的数据集合,但视图不占存储空间。建立视图可以保护数据安全(仅让用户查询修改可以看见的一些行列)、简化查询操作、保护数据的独立性。 l 视图的建立: SQL>CREATE VIEW jxzy.pole_well_view AS >(SELECT pole_path_num AS path, pole AS device_num FROM pole >UNION >SELECT pipe_path_num AS path, > well AS device_num FROM well); l 视图的替换: SQL>REPLACE VIEW jxzy.pole_well_view AS >(SELECT pole_path_num AS path, pole AS support_device FROM pole >UNION >SELECT pipe_path_num AS path, well AS support_device FROM well); l 视图的删除: SQL>DROP VIEW jxzy.pole_well_view; 4.1.4 序列维护 序列是由序列发生器生成的唯一的整数。 l 序列的建立: SQL>CREATE SEQUENCE jxzy.sequence_cable >START WITH 1 >INCREMENT BY 1 >NO_MAXVALUE; 建立了一个序列,jxzy.sequence_cable.currval返回当前值,jxzy.sequence_cable.nextval 返回当前值加1后的新值 l 序列的修改: SQL>ALTER SEQUENCE jxzy.sequence_cable >START WITH 1 //起点不能修改,若修改,应先删除,然后重新定义 >INCTEMENT BY 2 >MAXVALUE 1000; l 序列的删除: SQL>DROP SEQUENCE jxzy.sequence_cable 4.1. 5 索引维护 索引是与表相关的一种结构,它是为了提高数据的检索速度而建立的。因此,为了提高表上的索引速度,可在表上建立一个或多个索引,一个索引可建立在一个或几个列上。 l 索引的建立: SQL>CREATE INDEX jxzy.idx_switch >ON switch(switch_name) >TABLESPACE jxzy; l 索引的修改: SQL>ALTER INDEX jxzy.idx_switch >ON switch(office_num,switch_name) >TABLESPACE jxzy; l 索引的删除: SQL>DROP INDEX jxzy.idx_switch; 4.1. 6 完整性约束管理 数据库数据的完整性指数据的正确性和相容性。数据完整型检查防止数据库中存在不符合语义的数据。 完整性约束是对表的列定义一组规则说明方法。ORACLE提供如下的完整性约束. a. NOT NULL 非空 b. UNIQUE 唯一关键字 c. PRIMATY KEY 主键一个表只能有一个,非空 d. FOREIGA KEY 外键 e.CHECK 表的每一行对指定条件必须是true或未知(对于空值) 例如: l 某列定义非空约束: SQL>ALTER TABLE office_organization >MODIFY(desc VARCHAR2(20) >CONSTRAINT nn_desc NOT NULL) l 某列定义唯一关键字: SQL>ALTER TABLE office_organization >MODIFY(office_name VATCHAR2(20) >CONSTRAINT uq_officename UNIQUE) l 定义主键约束,主键要求非空: SQL>CREATE TABLE switch(switch_code NUMBER(8) >CONSTRAINT pk_switchcode PRIMARY KEY,) l 使主键约束无效: SQL>ALTER TABLE switch DISABLE PRIMARY KEY l 定义外键: SQL>CREATE TABLE POLE(pole_code NUMBER(8), >office_num number(3) >CONSTRAINT fk_officenum >REFERENCES office_organization(office_num) >ON DELETE CASCADE); l 定义检查: SQL>CREATE TABLE office_organization( >office_num NUMBER(3), >CONSTRAINT check_officenum >CHECK (office_num BETWEEN 10 AND 99); 4.2 ORACLE数据库用户与权限管理 ORACLE是多用户系统,它允许许多用户共享系统资源。为了保证数据库系统的安全,数据库管理系统配置了良好的安全机制。 4.2. 1 ORACLE数据库安全策略 l 建立系统级的安全保证: 系统级特权是通过授予用户系统级的权利来实现,系统级的权利(系统特权)包括:建立表空间、建立用户、修改用户的权利、删除用户等。系统特权可授予用户,也可以随时回收。ORACLE系统特权有80多种。 l 建立对象级的安全保证: 对象级特权通过授予用户对数据库中特定的表、视图、序列等进行操作(查询、增、删改)的权利来实现。 l 建立用户级的安全保证: 用户级安全保障通过用户口令和角色机制(一组权利)来实现。引入角色机制的目的是简化对用户的授权与管理。做法是把用户按照其功能分组,为每个用户建立角色,然后把角色分配给用户,具有同样角色的用户有相同的特权。 4.2.2 用户管理 ORACLE用户管理的内容主要包括用户的建立、修改和删除 l 用户的建立 SQL>CREATE USER jxzy >IDENTIFIED BY jxzy_password >DEFAULT TABLESPACE system >QUATA 5M ON system; //供用户使用的最大空间限额 l 用户的修改 SQL>CREATE USER jxzy >IDENTIFIED BY jxzy_pw >QUATA 10M ON system; l 删除用户及其所建对象 SQL>DROP USER jxzy CASCADE; //同时删除其建立的实体 4.2.3系统特权管理与控制 ORACLE 提供了80多种系统特权,其中每一个系统特权允许用户执行一个或一类数据库操作。 l 授予系统特权: SQL>GRANT CREATE USER,ALTER USER,DROP USER >TO jxzy_new >WITH ADMIN OPTION; l 回收系统特权: SQL>REVOKE CREATE USER,ALTER USER,DROP USER >FROM jxzy_new //但没有级联回收功能 l 显示已被授予的系统特权(某用户的系统级特权): SQL>SELECT*FROM sys.dba_sys_privs 4.2.4 对象特权管理与控制 ORACLE对象特权指用户在指定的表上进行特殊操作的权利。这些特殊操作包括增、删、改、查看、执行(存储过程)、引用(其它表字段作为外键)、索引等。 l 授予对象特权: SQL>GRANT SELECT,INSERT(office_num,office_name), >UPDATE(desc)ON office_organization >TO new_adminidtrator >WITH GRANT OPTION; l 回收对象特权: SQL>REVOKE UPDATE ON office_orgaization >FROM new_administrator l 显示已被授予的全部对象特权: SQL>SELECT*FROM sys.dba_tab_privs 4.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 授予用户角色 SQL>GRANT DBA TO new_administractor >WITH GRANT OPTION; 六、 SQL文的性能 写语句的经验: 1) 对于大表的查询使用索引 2) 少用in,exist等 3) 使用集合运算 4) 对于大表查询中的列应尽量避免进行诸如To_char,To_date,To_number等转换. 5) 有索引的尽量用索引,有用到索引的条件写在前面,如有可能和有必要就建立一些索引 6) 尽量避免进行全表扫描,限制条件尽可能多,以便更快 一、搜索到要查询的数据   人们在使用SQL时往往会陷入一个误区,即太关注于所得的结果是否正确,而忽略了不同的实现方法之间可能存在的性能差异。在工作实践中可以发现,不良的SQL往往来自于不恰当的索引设计、不充份的连接条件和不可优化的where子句。在对它们进行适当的优化后,其运行速度有了明显地提高!下面从这三个方面分别进行总结: 为了更直观地说明问题,所有实例中的SQL运行时间均经过测试,不超过1秒的均表示为(< 1秒)。 测试环境: 主机:HP LH II 主频:330MHZ 内存:128兆 操作系统:Operserver5.0.4 数据库:Sybase11.0.3 缺省情况下建立的索引是非群集索引,但有时它并不是最佳的;合理的索引设计要建立在对各种查询的分析和预测上。一般来说: l 有大量重复值、且经常有范围查询(between, >,< ,>=,< =)和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条件语句中的列都建有恰当的索引,但执行速度却非常慢: select * from record where substring(card_no,1,4)=\'5378\' (13秒) select * from record where amount/30< 1000 (11秒) select * from record where convert(char(10),date,112)=\'19991201\' (10秒) 分析: where子句中对列的任何操作结果都是在SQL运行时逐列计算得到的,因此它不得不进行表搜索,而没有使用该列上面的索引;如果这些结果在查询编译时就能得到,那么就可以被SQL优化器优化,使用索引,避免表搜索,因此将SQL重写成下面这样: select * from record where card_no like \'5378%\' (< 1秒) select * from record where amount < 1000*30 (< 1秒) select * from record where date= \'1999/12/01\' (< 1秒) 你会发现SQL明显快起来! 例2:表stuff有200000行,id_no上有非群集索引,请看下面这个SQL: Select count(*) from stuff where d_no in(\'0\',\'1\') (23秒) 分析: where条件中的\'in\'在逻辑上相当于\'or\',所以语法分析器会将in (\'0\',\'1\')转化为id_no =\'0\' or id_no=\'1\'来执行。我们期望它会根据每个or子句分别查找,再将结果相加,这样可以利用id_no上的索引;但实际上(根据showplan),它却采用了"OR策略",即先取出满足每个or子句的行,存入临时数据库的工作表中,再建立唯一索引以去掉重复行,最后从这个临时表中计算结果。因此,实际过程没有利用id_no上索引,并且完成时间还要受tempdb数据库性能的影响。 实践证明,表的行数越多,工作表的性能就越差,当stuff有620000行时,执行时间竟达到220秒!还不如将or子句分开: select count(*) from stuff where id_no=\'0\' select count(*) from stuff where id_no=\'1\' 得到两个结果,再作一次加法合算。因为每句都使用了索引,执行时间只有3秒,在620000行下,时间也只有4秒。或者,用更好的方法,写一个简单的存储过程: create proc count_stuff as   declare @a int   declare @b int   declare @c int   declare @d char(10)   begin   select @a=count(*) from stuff where id_no=\'0\'   select @b=count(*) from stuff where id_no=\'1\'   end   select @c=@a+@b   select @d=convert(char(10),@c)   print @d   直接算出结果,执行时间同上面一样快! 总结: 可见,所谓优化即where子句利用了索引,不可优化即发生了表扫描或额
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:ORACLE概念安装SQL文的性能备份论文.doc
    链接地址:https://www.zixin.com.cn/doc/553363.html
    页脚通栏广告

    Copyright ©2010-2026   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork