1:使用索引查询一定能提高查询的性能吗?举出实例  2:数据库设计的一、二、三范式、BCNF是什么?  3:Store Procedure和Function有何区别?  4:如何跟踪某个session的SQL?  5:如何使用CBO,CBO与RULE的区别?  6:描述tablespace和datafile之间的关系  7:truncate和delete有何区别?哪一种操作性能更快?  8:什么是Snapshot?与View有何区别?  9:pctused and pctfree 表示什么含义有什么作用  10:cursor一般用在什么地方?有何弱点?有何优点?    11:控制文件误删除,是rm -rf的方式删除的,问下,如何恢复启动数据库?  管理篇  1:SQL调整最关注的是什么?  2:Oracle的系统进程有哪些?作用是什么?  3:本地管理表空间和字典管理表空间的特点,ASSM有什么特点?  4:备份如何分类?  5:如果一个表被drop,在有完善的归档和备份的情况下,如何恢复  6:rman有几种方式,24*7的oltp数据库最好采用什么备份方式,如果宕机了,如何恢复?  7:standby的特点  8:对于一个要求恢复时间比较短的系统(数据库50G,每天归档5G),你如何设计备份策略  9:对于一个存在系统性能的系统,说出你的诊断处理思路  10:列举几种诊断IO、CPU、性能状况的方法  11:对statspack有何认识  12:如果系统现在需要在一个很大的表上创建一个索引,你会考虑那些因素,如何做以尽量减小对应用的影响  13:对raid10 和raid5有何认识  14:SGA主要有那些部分,主要作用是什么?谈下UGA的作用以及主要应用场景。  15:简单描述table / segment / extent / block之间的关系  16:说说你对索引的认识(索引的结构、对dml影响、对查询影响、为什么提高查询性能)
大家看下,结合自己的理解,发飙下自己的意见吧,谢谢了!

解决方案 »

  1.   

    1:使用索引查询一定能提高查询的性能吗?举出实例
    不一定...有些全表扫描执行更快
      2:数据库设计的一、二、三范式、BCNF是什么?BCNF是比第三范式有更严格的规范,但是会形成冗余
      3:Store Procedure和Function有何区别?
    PRO常用于增删改操作,返回结果
    FUN常用于查询,返回多结果集合  4:如何跟踪某个session的SQL?
    记得是从V$SESSION根据SESSIONID或者USER得到SQL.  5:如何使用CBO,CBO与RULE的区别?
    CBO基于规则优化,即使用ORACLE内部优化机制优化.RULE也是基于规则的,都是手动选择相应的优化规则,有CHOOSE,FIRST ROWS,ALL ROWS.当CHOOSE没有统计信息和索引的时候走CBO  6:描述tablespace和datafile之间的关系
    一个TABLESPACE包含多个DATAFILE,DATAFILE是存储在磁盘的物理文件,TABLESPACE是数据库的逻辑概念,
      7:truncate和delete有何区别?哪一种操作性能更快?
    TRUNCATE 可以降低表空间的使用
    DELETE只删除数据,但是无法清除其占用 的表空间,依然处于高水位(HWM)
    TRUNCATE更快  8:什么是Snapshot?与View有何区别?
    SNAPSHOT是快照,
    VIEW是视图,记得好像一个是系统视图,一个是用户视图,作用不同  9:pctused and pctfree 表示什么含义有什么作用
    不知道  10:cursor一般用在什么地方?有何弱点?有何优点?
    用在对多集合记录的地方,分条处理,弱点:效率不高
    优点:行处理能力好  11:控制文件误删除,是rm -rf的方式删除的,问下,如何恢复启动数据库?
    创建控制文件?  管理篇  1:SQL调整最关注的是什么?
    执行计划  2:Oracle的系统进程有哪些?作用是什么?
    监视MON,数据库写DBW,数据库日志进程,,.....  3:本地管理表空间和字典管理表空间的特点,ASSM有什么特点?  4:备份如何分类?  5:如果一个表被drop,在有完善的归档和备份的情况下,如何恢复
    基于时间点,基于SCN  6:rman有几种方式,24*7的oltp数据库最好采用什么备份方式,如果宕机了,如何恢复?
    忘记了... 管理的基本知道一点点
      

  2.   

    不大记得啦  好像是
    pctfree pctused是用来管理extent的  ptcfree是因为每行数据更新需要空间 所以oracle会额外保留一个空间  
      

  3.   

    比较truncate和delete 命令
    1、在功能上,truncate是清空一个表的内容,它相当于delete from table_name。
    2、 delete是dml操作,truncate是ddl操作;因此,用delete删除整个表的数据时,会产生大量的roolback,占用很多的rollback segments, 而truncate不会。
    3、在内存中,用delete删除数据,表空间中其被删除数据的表占用的空间还在,便于以后的使用,另外它是“假相”的删除,相当于windows中用delete删除数据是把数据放到回收站中,还可以恢复,当然如果这个时候重新启动系统(OS或者RDBMS),它也就不能恢复了!而用truncate清除数据,内存中表空间中其被删除数据的表占用的空间会被立即释放,相当于windows中用shift+delete删除数据,不能够恢复!
    4、truncate 调整high water  而delete不;truncate之后,TABLE的HWM退回到 INITIAL和NEXT的位置(默认)delete 则不可以。
    5、truncate 只能对TABLE,delete 可以是table,view,synonym。
    6、TRUNCATE TABLE 的对象必须是本模式下的,或者有drop any table的权限 而 DELETE 则是对象必须是本模式下的,或被授予 DELETE ON SCHEMA.TABLE 或DELETE ANY TABLE的权限。
    7、在外层中,truncate或者delete后,其占用的空间都将释放。
    8、truncate和delete只删除数据,而drop则删除整个表(结构和数据)。 
    在删除大数据量时(一个表中大部分数据时),可以采用以下步骤:
    1、先将不需要删除的数据复制到一个临时表中
    2、trunc table 表
    3、将不需要删除的数据复制回来。
    不同:DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的的删除操作作为事务记录在日志中保存以便进行进行回滚操作。TRUNCATE TABLE 则一次性地从表中删除所有的数据页并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。
    truncate的功能可以拆分为:dropping + re-creating a table,但truncate的效率要高。因为truncate无须考虑表索引、约束、触发器等的重建。另外truncate执行后,无法回滚(roll back)
      

  4.   

    貌似题目都不怎么困难,都是一些oracle基础方面的东东哦。
      

  5.   

    pctused  块使用低于这个值的,将被加入freelist列表,oracle往磁盘写数据时,将优先写入到位于freelist列表里的块。
    pctfree   块保留一定空间,以便于将来块上数据变大后,不被移走或链接(要极力避免这种情况发生,很影响性能)。如一个列的值为xxx,update为xxxxx后,必须所占空间要变大。 管理篇  1:SQL调整最关注的是什么?
              
      2:Oracle的系统进程有哪些?作用是什么?
            PMON 进程崩溃后恢复,SMON 系统崩溃后恢复 (典型如断电后恢复)DBWn 写数据到文件 ARCn  归档  LGWn 写重做日志  CKPT 在文件头写检查点
       3:本地管理表空间和字典管理表空间的特点,ASSM有什么特点?
    字典管理表空间9I开始已经被淘汰了。目前只local,特点嘛,更好管理,性能更好。
      4:备份如何分类?
    冷备份和热备份。 热备份有全备份和增量备份。增量备份分为累积和差异备份。
      5:如果一个表被 drop,在有完善的归档和备份的情况下,如何恢复
    做个基于表的恢复就行了,语句不写了。或者知道drop时间的话,做个基于时间的恢复。如果知道SCN的话,那更完美了。
      6:rman有几种方式,24*7的oltp数据库最好采用什么备份方式,如果宕机了,如何恢复?
    什么叫RMAN有几种方式?少写字了吧。         采用热备份,制定个一周增量备份策略。 有备份有归档,如果是想完全恢复到死机前,先关机,然后:
    run{
    startup mount;
    allocate channel t1 type disk;
    allocate channel t2 type disk;
    restore database;
    recover database;
    alter database open;
    release channel t1;
    release channel t2;
    }
      7:standby的特点
    翻译:待命。 oracle的DATAGUARD,standby有物理和逻辑两种,两种特点很有意思,一是一句话能说清的,自己去看吧。
      8:对于一个要求恢复时间比较短的系统(数据库50G,每天归档 5G),你如何设计备份策略
    数据库并不算大,一周累积增量备份,0 1 1 1 1 1 1  即 星期天全备份,其他每天为累积增量,就是备份周日到当天的变动。恢复时只需要周日和最近一天的备份和此备份到目前的归档即可。
      9:对于一个存在系统性能的系统,说出你的诊断处理思路
    90%问题是SQL问题,通过statspack得到问题SQL,通过explain plan,sqltrace&tkprof,sqlplus的autotrace等等分析到SQL执行计划,然后据此修改,比如加索引。
      10:列举几种诊断IO、 CPU、性能状况的方法
    AIX下的topas挺好的。linux下就iostat吧。
      11:对statspack有何认识
    能得到一定时间内oracle占用资源前几的SQL。
      12:如果系统现在需要在一个很大的表上创建一个索引,你会考虑那些因素,如何做以尽量减小对应用的影响
    避免在创建期间对此表操作。尽量在负载低的时候做,如凌晨。
      13:对raid10 和raid5有何认识
    raid5至少要3块硬盘,允许坏一块。raid10为raid1+raid0,至少要4块硬盘,2块镜像,2块分布(带区组)。
      14:SGA 主要有那些部分,主要作用是什么?谈下UGA的作用以及主要应用场景。
      buffer cache 读写数据的缓存,share pool 已解析SQL存放,java pool 与JAVA相关的应用, large pool 备份
    log buffer 重做日志相关。UGA和PGA问一次就得翻一次书,愁啊,总也理不清。
      15:简单描述table / segment / extent / block之间的关系
    block  组成了 extent 组成了 segment 组成了  table
      16:说说你对索引的认识(索引的结构、对dml影响、对查询影响、为什么提高查询性能)
    oracle的索引种类很多,有典型的B tree索引,索引组织表、B tree聚簇索引、反向键索引、降序索引、位图索引、位图连接索引、基于函数的索引、自定义索引。 对DML影响:减慢速度。对查询影响:增加速度(有用的情况下,没用就只能又浪费空间,又降低DML性能了)。为什么提高查询性能:快速定位。
    附UGA PGA 
    The Program Global Area or Process Global Area (PGA) is a memory region that contains data and control information for a single server process or a single background process. The PGA is allocated when a process is created and deallocated when the process is terminated. In contrast to the SGA, which is shared by several processes, the PGA is an area that is used by only one process. In a dedicated server configuration, the PGA includes these components:Sort area: Used for any sorts that may be required to process the SQL statement
    Session information: Includes user privileges and performance statistics for the session
    Cursor state: Indicates the stage in the processing of the SQL statements that are currently used by the session
    Stack space: Contains other session variablesNote: Some of these structures are stored in the SGA when using a shared server configuration. If using a shared server configuration, it is possible for multiple user processes to share server processes. If a large pool is created, the structures are stored in the large pool; otherwise, they are stored in the shared pool.The User global area (UGA) contains the session information for Oracle Shared server. UGA is located in the Shared pool when using shared server session and if large pool is not configured.
    作为一个复杂的Oracle数据库系统来说,每时每刻都要处理不同用户所提交的SQL语句,获取数据并返回数据给用户。前面已经说到,解析SQL语句的工作是在 Oracle实例中的shared pool所完成的。那么对于每个session来说,其执行SQL语句时所传入的绑定变量放在哪里?而且,对于那些需要执行比较复杂SQL的 session来说,比如需要进行排序(sort)或hash连接(hash-join)时,这时,这些session所需要的内存空间又从哪里来?另外,还有与每个session相关的一些管理控制信息又放在哪里?对于诸如此类与每个session相关的一些内存的分配问题,Oracle通过引入 PGA这个内存组件来进行解决。
    5.7.1  PGA的概念及其包含的内存结构PGA按照Oracle官方文档解释,叫做程序全局区(Program Global Area),但也有些资料上说还可以理解为进程全局区(Process Global Area)。这两者没有本质的区别,它首先是一个内存区域,其次,该区域中包含了与某个特定服务器进程相关的数据和控制信息。每个进程都具有自己私有的 PGA区,这也就意味着,这块区域只能被其所属的进程进入,而不能被其他进程访问,所以在PGA中不需要latch这样的内存结构来保护其中的信息。笼统地说,PGA里包含了当前进程所使用的有关操作系统资源的信息(比如打开的文件句柄等)以及一些与当前进程相关的一些私有的状态信息。每个PGA区都包含以下两部分。ž 固定PGA部分(Fixed PGA):这部分包含一些小的固定尺寸的变量,以及指向变化PGA部分的指针。ž 变化PGA部分(Variable PGA):这部分是按照堆(Heap)来进行组织的,所以这部分也叫做PGA堆。PGA堆中所包含的内存结构包括:Ø 有关一些固定表的永久性内存。Ø 如果session使用的是专用连接方式(dedicated server),则还含有用户全局区(User Global Area,UGA)子堆。如果session使用的是共享连接方式(shared server),则UGA位于SGA中。UGA是PGA中的最重要的部分。Ø 调用全局区(Call Global Area,CGA)子堆。UGA是包含与某个特定session相关信息的内存区域,比如session的登录信息以及session私有的SQL区域等。每个UGA也包含以下两个部分。ž 固定UGA部分(Fixed UGA):这部分包含一些小的固定尺寸的变量,以及指向变化UGA部分的指针。ž 变化UGA部分(Variable UGA):这部分也是按照堆来进行组织的,可以从X$KSMUP视图中看到有关UGA堆的分布情况。UGA堆的分布与open_cursors、 open_links等参数有关系。所谓的游标(cursor)就是放在这里的,游标指向shared pool里的包含SQL文本以及执行计划等的对象。UGA堆中所包含的内存结构介绍如下。Ø 私有SQL区域(Private SQL Area):这部分区域包含绑定变量信息以及运行时的内存结构等数据。每一个发出SQL语句的session都有自己的私有SQL区域。这部分区域又可分成以下两部分。— 永久内存区域:这里存放了相同SQL语句多次执行时都需要的一些游标信息,比如绑定变量信息、数据类型转换信息等。这部分内存只有在游标被关闭时才会被释放。— 运行时区域:在处理SQL语句时的第一步就是要创建运行时区域,这里存放了当SQL语句运行时所使用的一些信息。对于DML(INSERT、 UPDATE、DELETE)语句来说,SQL语句执行完毕就释放该区域;而对于查询语句(SELECT)来说,则是在所有数据行都被获取并传递给用户以后被释放,或者该查询被取消以后也会被释放。Ø  Session相关的信息。这部分信息包括以下几部分。— 正在使用的包(package)的状态信息。— 使用alter session这样的命令所启用的跟踪信息,或者所修改的session级别的优化器参数(optimizer_mode)、排序参数(sort_area_size等)、修改的NLS参数等。— 所打开的db links。— 可使用的角色(roles)等。Ø 工作区(Work area):这块区域主要用来存放执行SQL的过程中所产生的中间数据,比如排序时,需要在这里存放排序过程中的中间数据。这部分占据了PGA中的大部分空间。其大小依赖于所要处理的SQL语句的复杂程度而定。如果SQL语句包含诸如group by、hash-join等这样的操作,则会需要很大的SQL工作区域。实际上,我们调整PGA也就是调整这块区域。而UGA 所处的位置完全由session连接的方式决定:ž 如果session是通过共享服务器(shared server)方式登录到数据库的,则毫无疑问,UGA必须能够被所有进程访问,所以在这种情况下,UGA是从SGA中进行分配的。进一步说,如果SGA 中设置了large pool,则UGA从large pool里进行分配;否则,如果没有设置large pool,则UGA只能从shared pool里进行分配。ž 如果session是通过专用服务器(dedicated server)方式登录到数据库的,则UGA是从进程的PGA中进行分配的。
    5.7.2  PGA自动管理在Oracle 9i之前,我们主要是通过设置sort_area_size、hash_area_size等参数值(通常都叫做*_area_size)来管理PGA的使用,不过严格说来,是对PGA中的UGA进行管理。但是,这里有个问题,就是这些参数都是针对某个session而言的,也就是说设置的参数值对所有登录到数据库的session都生效。在数据库实际运行过程中,总有些session需要的PGA多,而有些session需要的PGA少。如果都设置一个很小的*_area_size,则会使得某些SQL语句运行时由于需要将临时数据交换到磁盘而导致效率低下。而如果都设置一个很大的值,又有可能一方面浪费空间;另一方面,消耗过多内存可能导致操作系统其他组件所需要的内存短缺,而引起数据库整体性能下降。所以如何设置*_area_size的值一直都是 DBA很头疼的一个问题。而从 Oracle 9i起(当然也包括Oracle 10g)所引入的一个新的特性可以有效的解决这个问题,这个特性就是自动PGA管理。首先,设置workarea_size_policy参数。该参数为auto(也是默认值)时,表示启用PGA自动管理;而设置该参数为manual时,则表示禁用PGA自动管理,仍然沿用Oracle 9i之前的方式,也就是使用*_area_size对PGA进行管理。
      

  6.   

    1:使用索引查询一定能提高查询的性能吗?举出实例     大部分情况下,当数据量较大的时候,索引可以提高查询性能,但需要占用磁盘空间。对于小表有些时候不一定比存在索引情况的效率高。  2:数据库设计的一、二、三范式、BCNF是什么?
                 一范式:表中的每一列不可再分割。
                二范式:满足 一范式,当存在组合关键字,非关键字段必须完全依赖于一组 组合关键字,而不是组合关键字的某一部分
                三范式:满足二范式,一个table里面所有的列不依赖于另外一个table里面非关键的列。
        BCNF:满足三范式,加上约束:不存在某个关键字段决定另外一个关键字段。  3:Store Procedure和Function有何区别?
          Store Procedure:可以对表,视图等进行任何操作,
          Function:不能对表进行更新、删除等操作。  4:如何跟踪某个session的SQL?  select * from v$session
      5:如何使用CBO,CBO与RULE的区别?
    CBO基于规则优化,即使用ORACLE内部优化机制优化.RULE也是基于规则的,都是手动选择相应的优化规则,有CHOOSE,FIRST ROWS,ALL ROWS.当CHOOSE没有统计信息和索引的时候走CBO  6:描述tablespace和datafile之间的关系
                   一个表空间可以包含多个数据文件,一个数据文件只能属于一个表空间。
                  对表空间的状态的设定可以影响数据文件的使用,比如表空间的只读,脱机等  7:truncate和delete有何区别?哪一种操作性能更快?         truncate table 将不会记录到联机日志文件,但delete将记录到联机日志文件,truncate更快,不存在写日志的过程  8:什么是Snapshot?与View有何区别?                   某一个时刻数据的镜像,对于后续的更改将会被应用到快照
             view仅仅是作为对象的非物理化呈现  9:pctused and pctfree 表示什么含义有什么作用PCTFREE用于指定数据块中必须保留的最小空闲空间比例,当数据块道道这个参数的限制后,该数据块将被标记为不可用,默认值为10。PCTUSED设置数据块是否可用的界限,也就是说,为了使数据块能够被再次使用,已经占用的存储空间必须低于PCTUSED设置的比例。  10:cursor一般用在什么地方?有何弱点?有何优点?
                    一般对需要逐行处理数据时使用,处理速度比较慢。行处理能力好  11:控制文件误删除,是rm -rf的方式删除的,问下,如何恢复启动数据库?      alter system set control_files = '<dir1>','<dir2>,...'  管理篇  1:SQL调整最关注的是什么?
    查询性能,执行计划  2:Oracle的系统进程有哪些?作用是什么?
                   主要的后台进程:
    DBWn(数据定进程) PMON(进程监控) CKPT(检查点进程)
    LGWR(日志写) SMON(系统监控)
    DBWn 的触发条件
    发生检查点
    脏缓存达到限制
    没有自由的缓存
    超时
    表空间离线
    表空间只读
    表被删除或截断
    开始备份表空间   alter system set db_writer_processes=3 scope=spfile;
    可以修改数据写进程的数量
    LGWR 的触发条件
    提交的时候
    达到三分之一满时
    日志大小达到1M时
    每隔3秒
    SMON 的作用:
    实例恢复
    回滚、前滚
    释放临时表空间
    合并自由空间

    PMON 
    清除失败进程
    回滚事务
    释放锁
    释放其它资源 CKPT
    给DBWN信号
    更新数据文件头
    更新控制文件
      3:本地管理表空间和字典管理表空间的特点,ASSM有什么特点?
                 10g以后不再支持字典管理表空间,性能好,采用位图来管理。  4:备份如何分类?
    冷备份和热备份。 热备份有全备份和增量备份。增量备份分为累积和差异备份。  5:如果一个表被drop,在有完善的归档和备份的情况下,如何恢复
         使用基于时间的恢复。  6:rman有几种方式,24*7的oltp数据库最好采用什么备份方式,如果宕机了,如何恢复?
      7:standby的特点
    备用  8:对于一个要求恢复时间比较短的系统(数据库50G,每天归档5G),你如何设计备份策略  9:对于一个存在系统性能的系统,说出你的诊断处理思路  10:列举几种诊断IO、CPU、性能状况的方法  11:对statspack有何认识  12:如果系统现在需要在一个很大的表上创建一个索引,你会考虑那些因素,如何做以尽量减小对应用的影响  13:对raid10 和raid5有何认识  14:SGA主要有那些部分,主要作用是什么?谈下UGA的作用以及主要应用场景。
    系统全局区(SGA)包括几的几个部分:
    共享池
    数据缓冲区
    重做日志缓冲区
    大池
    JAVA池
    流池
    系统全局区是动态的,由参数 SGA_MAX_SIZE决定。
    查看当前系统的SGA大小:show parameter sga_max_size;
    要修改:alter system set sga_max_size=1200m scope=spfile;
    因为实例内存的分配是在数据库启动时进行的,所以要让修改生效,要重启数据库。 ORACLE 10G 引入了 ASMM(自动共享内存管理),DBA只需设置SGA_TARGET, ORACLE就会
    自动的对共享池、JAVA池、大池、数据缓冲区、流池进行自动调配。取消自动调配就是sga_target
    设为0。    共享池:
    由库缓存和数据字典缓存组成
    用于存储:
    最近执行的SQL语句
    最近使用的数据定义 大小由 shared_pool_size 决定
    查看:show parameter shared_pool_size
    修改: alter system set shared_pool_size=120m; 库缓存:
    存储最近使用的 sql 和 pl/sql语句
    管理上遵循 LRU 规则 
    包含两个部分:共享SQL区、共享PL/SQL区
    大小由 shared_pool_size 决定,不能单独指定 数据字典缓存:
    存储数据库中数据文件、表、索引、列、用户和其它数据对象的定义和权限信息
    大小由 shared_pool_size 决定,不能单独指定
     
        数据缓冲区:
    存储从数据文件中获得的数据块的镜像
    大小由 db_cache_size 决定 查看: show parameter db_cache_size; 设置: alter system set db_cache_size=800M;    重做日志缓冲区:
    记录了所有数据块的改变
    主要用于数据恢复 
    大小由LOG_BUFFER决定 日志缓冲区,通常不需要太大
    alter system set log_buffer=30000000 scope=spfile; 
    (注:数值后不要单位,以字节为单位)    大池:
    主要为了减轻共享池的负担
    用于:
    共享服务器进程的PGA大部分会放到大池中
    大规模IO操作时
    RMAN备份时用 大小由 large_pool_size 决定    java池:
    java命令分析,编译时会用到
    大小由 java_pool_size决定
    看详细的SGA分配情况:select * from v$sgainfo;
          15:简单描述table / segment / extent / block之间的关系
    block 组成了 extent 组成了 segment 组成了 table  16:说说你对索引的认识(索引的结构、对dml影响、对查询影响、为什么提高查询性能)
    大家看下,结合自己的理解,发飙下自己的意见吧,谢谢了!
      

  7.   

    顶一下
      oracleQQ 群 :54775466
          欢迎爱好者 一起探讨
      

  8.   

    select t.*
    from v$session s,v$sqltext t
     where    s.status='ACTIVE' and s.username is not null and s.sql_hash_value = t.hash_value;--
      

  9.   

    Oracle群有没有msn群啊,加我一个 [email protected]
      

  10.   

    除了那个bcnf不知道,别的基本上我都知道.如果你看过oracle的ocp手册,oracle administration.基本问题不大
      

  11.   

    oracle 之路,渐行渐远......
      

  12.   

    我来回答一下第一个索引搜索和全表扫描的问题:
        索引可近似的理解为是针对某一列对表中的数据进行了排序,所以,通常情况下,在利用索引进行查询的时候会比全表搜索快。搜索方式可类比树形查找和顺序查找。但数据库的索引有一个很大的问题就是,当数据库进行了频繁的insert,delete操作后,会产生索引碎片。索引碎片过多将极大的增加查询时的系统IO量。在oracle中有一种机制,就是在查询的时候会自动计算查询操作所引起的IO量,当使用索引的IO量大于全表搜索时,系统将不再使用索引。 
        我曾经遇到过一个实际的例子,就是有一个千万级数据表,对一个日期列建立索引。查询时,每当查询的时间跨度超过十天时,系统就不再使用索引,开始全表扫描。在重建索引后,系统就开始用索引查询了。
        
        
    因此,是否使用索引我认为取决于一下几个方面:
        1.索引的完整性。碎片过多的索引造成的IO会让效率受到极大影响。
        2.数据量的大小。当数据量越大时,树形查找相对顺序查找的优势就越明显,小数据量就无所谓了。