oracle数据库中有哪几种类型引索

oracle数据库中有哪几种类型引索,第1张

有两大类索引

唯一索引:

对于被索引列,索引表中每一行包含一个唯一值;

非唯一索引:

行中的索引值可重复;

从索引中读取数据的 *** 作取决于使用的索引类型和查询中访问索引的方法。

dbms_stats能良好地估计统计数据(尤其是针对较大的分区表) 并能获得更好的统计结果 最终制定出速度更快的SQL执行计划

exec dbms_stats gather_schema_stats(

ownname          => SCOTT

options          => GATHER AUTO

estimate_percent => dbms_stats auto_sample_size

method_opt       => for all columns size repeat

degree           =>

)       为了充分认识dbms_stats的好处 需要仔细体会每一条主要的预编译指令(directive) 下面让我们研究每一条指令 并体会如何用它为基于代价的SQL优化器收集最高质量的统计数据

options参数

使用 个预设的方法之一 这个选项能控制Oracle统计的刷新方式

gather——重新分析整个架构(Schema)

gather empty——只分析目前还没有统计的表

gather stale——只重新分析修改量超过 %的表(这些修改包括插入 更新和删除)

gather auto——重新分析当前没有统计的对象 以及统计数据过期(变脏)的对象 注意 使用gather auto类似于组合使用gather stale和gather empty

注意 无论gather stale还是gather auto 都要求进行监视 如果你执行一个alter table xxx monitoring命令 Oracle会用dba_tab_modifications视图来跟踪发生变动的表 这样一来 你就确切地知道 自从上一次分析统计数据以来 发生了多少次插入 更新和删除 *** 作

estimate_percent选项

estimate_percent参数是一种比较新的设计 它允许Oracle的dbms_stats在收集统计数据时 自动估计要采样的一个segment的最佳百分比

estimate_percent => dbms_stats auto_sample_size

要验证自动统计采样的准确性 你可检视dba_tables sample_size列 一个有趣的地方是 在使用自动采样时 Oracle会为一个样本尺寸选择 到 的百分比 记住 统计数据质量越好 CBO做出的决定越好

method_opt选项

method_opt for table 只统计表

for all indexed columns 只统计有索引的表列

for all indexes 只分析统计相关索引

for all columns

dbms_stats的method_opt参数尤其适合在表和索引数据发生变化时刷新统计数据 method_opt参数也适合用于判断哪些列需要直方图(histograms)

某些情况下 索引内的各个值的分布会影响CBO是使用一个索引还是执行一次全表扫描的决策 例如 假如在where子句中指定的值的数量不对称 全表扫描就显得比索引访问更经济

如果你有一个高度倾斜的索引(某些值的行数不对称) 就可创建Oracle直方图统计 但在现实世界中 出现这种情况的机率相当小 使用CBO时 最常见的错误之一就是在CBO统计中不必要地引入直方图 根据经验 只有在列值要求必须修改执行计划时 才应使用直方图

为了智能地生成直方图 Oracle为dbms_stats准备了method_opt参数 在method_opt子句中 还有一些重要的新选项 包括skewonly repeat和auto

method_opt=> for all columns size skewonly

method_opt=> for all columns size repeat

method_opt=> for all columns size auto

skewonly选项会耗费大量处理时间 因为它要检查每个索引中的每个列的值的分布情况

假如dbms_stat发现一个索引的各个列分布得不均匀 就会为那个索引创建直方图 帮助基于代价的SQL优化器决定是进行索引访问 还是进行全表扫描访问 例如 在一个索引中 假定有一个列在 %的行中 如清单B所示 那么为了检索这些行 全表扫描的速度会快于索引扫描

SKEWONLY option—Detailed ysis

Use this method for a first time ysis for skewed indexes

This runs a long time because all indexes are examined

begin

dbms_stats gather_schema_stats(

ownname          => SCOTT

estimate_percent => dbms_stats auto_sample_size

method_opt       => for all columns size skewonly

degree           =>

);

end;

重新分析统计数据时 使用repeat选项 重新分析任务所消耗的资源就会少一些 使用repeat选项(清单C)时 只会为现有的直方图重新分析索引 不再搜索其他直方图机会 定期重新分析统计数据时 你应该采取这种方式

REPEAT OPTION Only re yze histograms for indexes

that have histograms

Following the initial ysis the weekly ysis

job will use the repeat option The repeat option

tells dbms_stats that no indexes have changed and

it will only re yze histograms for

indexes that have histograms

begin

dbms_stats gather_schema_stats(

ownname          => SCOTT

estimate_percent => dbms_stats auto_sample_size

method_opt       => for all columns size repeat

degree           =>

);

end;

使用alter table xxx monitoring;命令来实现Oracle表监视时 需要使用dbms_stats中的auto选项 如清单D所示 auto选项根据数据分布以及应用程序访问列的方式(例如通过监视而确定的一个列的工作量)来创建直方图 使用method_opt=> auto 类似于在dbms_stats的option参数中使用gather auto

begin

dbms_stats gather_schema_stats(

ownname          => SCOTT

estimate_percent => dbms_stats auto_sample_size

method_opt       => for all columns size auto

degree           =>

);

end;

并行统计收集degree参数

Oracle推荐设置DBMS_STATS的DEGREE参数为DBMS_STATS AUTO_DEGREE 该参数允许Oracle根据对象的大小和并行性初始化参数的设置选择恰当的并行度

聚簇索引 域索引 位图连接索引不能并行收集

如何使用dbms_stats分析统计信息

创建统计信息历史保留表

sql> exec dbms_stats create_stat_table(ownname => scott stattab => stat_table ) ;

导出整个scheme的统计信息

sql> exec dbms_stats export_schema_stats(ownname => scott stattab => stat_table ) ;

分析scheme

Exec dbms_stats gather_schema_stats(

ownname => scott

options => GATHER AUTO

estimate_percent => dbms_stats auto_sample_size

method_opt => for all indexed columns

degree => )

分析表

sql> exec dbms_stats gather_table_stats(ownname => scott tabname => work_list estimate_percent => method_opt=> for all indexed columns ) ;

分析索引

SQL> exec dbms_stats gather_index_stats(ownname => crm indname => IDX_ADM_PERMISSION_PID_MID estimate_percent => degree => ) ;

如果发现执行计划走错 删除表的统计信息

SQL>dbms_stats delete_table_stats(ownname => scott tabname => work_list ) ;

导入表的历史统计信息

sql> exec dbms_stats import_table_stats(ownname => scott tabname => work_list stattab => stat_table ) ;

如果进行分析后 大部分表的执行计划都走错 需要导回整个scheme的统计信息

sql> exec dbms_stats import_schema_stats(ownname => scott stattab => stat_table );

导入索引的统计信息

SQL> exec dbms_stats import_index_stats(ownname => crm indname => IDX_ADM_PERMISSION_PID_MID stattab => stat_table )

检查是否导入成功

SQL> select table_name num_rows a blocks a last_ yzed from all_tables a where a table_name= WORK_LIST ;

分析数据库(包括所有的用户对象和系统对象) gather_database_stats

分析用户所有的对象(包括表 索引 簇) gather_schema_stats

分析表 gather_table_stats

分析索引 gather_index_stats

删除数据库统计信息 delete_database_stats

删除用户方案统计信息 delete_schema_stats

删除表统计信息 delete_table_stats

删除索引统计信息 delete_index_stats

删除列统计信息 delete_column_stats

设置表统计信息 set_table_stats

设置索引统计信息 set_index_stats

设置列统计信息 set_column_stats

从Oracle Database g开始 Oracle在建库后就默认创建了一个名为GATHER_STATS_JOB的定时任务 用于自动收集CBO的统计信息

这个自动任务默认情况下在工作日晚上 和周末全天开启 调用DBMS_STATS GATHER_DATABASE_STATS_JOB_PROC收集统计信息

该过程首先检测统计信息缺失和陈旧的对象 然后确定优先级 再开始进行统计信息

可以通过以下查询这个JOB的运行情况

select from Dba_Scheduler_Jobs where JOB_NAME = GATHER_STATS_JOB

其实同在 点运行的Job还有一个AUTO_SPACE_ADVISOR_JOB

SQL> select JOB_NAME LAST_START_DATE from dba_scheduler_jobs;

JOB_NAME                       LAST_START_DATE

AUTO_SPACE_ADVISOR_JOB        DEC PM + :

GATHER_STATS_JOB              DEC PM + :

FGR$AUTOPURGE_JOB

PURGE_LOG                      DEC AM PRC

然而这个自动化功能已经影响了很多系统的正常运行 晚上 点对于大部分生产系统也并非空闲时段

而自动分析可能导致极为严重的闩锁竞争 进而可能导致数据库Hang或者Crash

所以建议最好关闭这个自动统计信息收集功能

方法之一:

exec dbms_scheduler disable( SYS GATHER_STATS_JOB );

恢复自动分析:

exec dbms_scheduler enable( SYS GATHER_STATS_JOB );

方法二

alter system set _optimizer_autostats_job =false scope=spfile;

alter system set _optimizer_autostats_job =true scope=spfile;

lishixinzhi/Article/program/Oracle/201311/18864

1999年,Oracle正式提供世界上第一个Internet数据库Oracle8i。

新功能:

Internet 计 算

--WebDB,用于建立、部署和监视Web应用

--iMedia

--OracleInternet文件系统

Java

--数据库中的JavaVM

--Java存储过程、函数和触发器

--在Java、SQL和PL/SQL之间的无缝交互

--嵌入在Java代码中的SQLJ

--增强的JDBC驱动程序

数据仓库技术

--summary管理

--散列和组合分区

--资源管理

--透明的表空间

--函数索引与虚拟列

--联机索引建立与重建

--降序索引

--自动并行查询级

--联合索引和DML单表summary

--只读备用数据库

--直接的路径装载API

--新的位图索引功能

--样例函数

--并行和细粒度化ANALYZE

--取消合法限制状态

--拷贝统计数据

--MERGE划分 *** 作

--前“n”个查询优化

事务处理

--发布与订阅能力

--数据库事件触发器

--自治事务

--单表散列簇

--分区表中的对象类型列

--分区表中的LOB

--按索引组织的分区表

--稳定的优化器执行规划

Oracle并行服务器

--针对可伸缩的内部实例查询的ConsistentReadServer

--安装向导

--自动的连接负载平衡机制

--在特定节点上的强制性执行作业

对象关系数据库

--临时LOB

--集合无嵌套技术

--对象视图的增强

--对象Cache的增强

--增强的SQLLoader,支持对象、集合和LOB的装载

--LOB性能的增强

--LONG到LOB的数据迁移

--用户定义的对象标识符和嵌套式标识符

--对不稳定REF的探测分析

安全性

--细粒度化访问控制

--可扩展和参数驱动的应用上下文规范

--LDAP集成

 N层认证与授权

 SSL与X509v3支持

 PADIUS适配器

系统管理与易用性

--基于Java的多用户Oracle企业管理器

--基于Java的Oracle通用安装程序

--基于Java的数据库配置助手

--利用监听程序进行自动实例注册

--并行事务的并行恢复

--取消列

--针对运行时间较长的 *** 作的过程监视器

--恢复管理器的性能改进

--恢复管理器的磁盘亲和力探测能力

--自动式备用数据库

--对实例恢复限制恢复时间

--对受损块的探测和修复

--本地管理的表空间

--多档案过程与目标

--简单的表空间及时点恢复

复制与决策自动化

--为方便繁杂部署而部署的快照模块

--脱机实例化

--在可更新的快照中列级别的子集化

--内置的申请包

--快照刷新性能的改进

--分布式查询优化

--安全模型的功能增强

--支持OracleLite

PL/SQL改进

--在PL/SQL(bulkbinds)中,控制一个SQL语句中的多个数据项

--在PL/SQL中,通过引用传递参数

--在PL/SQL中的嵌入式动态SQL

--为了工具厂商而覆盖PL/SQL代码

--无限制的PL/SQL包大小

可扩展性

--可扩展的索引机制

--可扩展的优化器

--数据cartridge服务

--ProCTM外部过程

--Oracle调用接口回调注册

--在按索引组织的表中进行二级索引

--支持外部过程中的对象

其他新增功能

--支持欧元符

--临时表

--在调用程序的安全关系中执行子程序

--集成Microsoft事务服务器

--NetTM的>

以上就是关于oracle数据库中有哪几种类型引索全部的内容,包括:oracle数据库中有哪几种类型引索、ORACLE中dbms、oracle 8i是九几年推出的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9406560.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存