oracle执行计划

oracle组合索引整理

泄露秘密 提交于 2020-02-04 07:44:58
最近刚好又聊到了组合索引,由于担心自己记忆的不准确就实践了一番,结果发现和百度的好像不太一样,对此有疑惑的我,于是写下了这篇文章,希望对大家有用。 第一种情况:组合索引(主键) 1、建表 -- CREATE TABLE CREATE TABLE A ( AID NUMBER NOT NULL, ACOU NUMBER NOT NULL, ACOUA CHAR(30) NOT NULL ) TABLESPACE BDCK PCTFREE 10 INITRANS 1 MAXTRANS 255 STORAGE ( INITIAL 64K NEXT 1M MINEXTENTS 1 MAXEXTENTS UNLIMITED ); -- CREATE/RECREATE PRIMARY, UNIQUE AND FOREIGN KEY CONSTRAINTS ALTER TABLE A ADD CONSTRAINT PA PRIMARY KEY (AID, ACOU, ACOUA) USING INDEX TABLESPACE BDCK PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE ( INITIAL 64K NEXT 1M MINEXTENTS 1 MAXEXTENTS UNLIMITED ); 2、数据生成,我用的PLSQL的数据生成工具 3、索引测试

oracle——笔记——4内容

半城伤御伤魂 提交于 2020-02-04 00:40:23
--外连接 作用:查询不满足连接条件的数据 select * from emp e,dept d where e.deptno = d.deptno; select * from dept; select * from emp e,dept d where e.deptno(+) = d.deptno; ---右外 insert into emp(empno) values(1122); select * from emp e,dept d where e.deptno = d.deptno(+); ---左外 select * from emp e,dept d where e.deptno(+) = d.deptno(+); ---不存在这种写法 ----外连接的另外一种写法: select * from emp e left outer join dept d on e.deptno = d.deptno; ---left 显示左边表不满足条件的数据 ---outer 可以省略 ---on 只能写连接条件,其他条件 写到where里 select * from emp e right outer join dept d on e.deptno = d.deptno; ---右外 select * from emp e full outer join dept d on e

Oracle学习笔记1

懵懂的女人 提交于 2020-02-03 08:38:15
  本人刚从MySQL转学Oracle,刚接触时的感觉,MySQL与Oracle在sql语法上大致相似。很大区别是MySQL与Oracle在表空间分配时的区别:MySQL可以建立多个数据库,每个数据库包含多张表。Oracle建立多个表空间,每一个表空间对应多张表。每一个表空间授权给一个用户进行使用。如此看来Oracle的表空间相当于MySQL的库,但是有一个很大的区别是Oracle中可以把一个表空间中的表分区到其他的表空间,来提升查询的速率。   下载: 数据库 Oracle11g,可视化图形界面 Toad for Oracle 12.11   Oracle下好后自带sqlplus,可以对 oracle数据库通过命令行进行操作;比较好用的Oracle的可视化图形界面是toad;个人目前比较偏好于sqlplus。   下面讲一下sqlplus的操作:   进入命令行之后通过输入 sqlplus 用户名/密码 即可进入SQL> 操作。 oracle11g有着几个默认用户 ,其中常用的有sys、system、scott。 但是通过以上行红字操作system和scott是无法进入sql操作的。需 要对用户进行解锁(百度),之后才能对它们进行操作。sqlplus每次进来它的宽度linesize和每页显示个数pagesize都是设置的很不合理的。我们可以写入命令 set linesize

oracle统计信息-11新特性多列统计信息

好久不见. 提交于 2020-01-28 03:54:12
当where子句后指定了一个表的多个列条件时,优化器通常会将多个列的选择性(selectivity)相乘得到where语句的选择性,导致优化器做出错误判断! Oracle 11g引入了多列统计信息概念,如果上面情况列关联性很好,我们可以做多列统计信息收集,让优化器做出正确判断。 例如: SQL> select count(*) from sh.customers where CUST_STATE_PROVINCE = 'CA'; COUNT(*) ---------- 3341 SQL> select count(*) from sh.customers where CUST_STATE_PROVINCE = 'CA' and country_id=52790; COUNT(*) ---------- 3341 SQL> select count(*) from sh.customers where CUST_STATE_PROVINCE = 'CA' and country_id=52775; COUNT(*) ---------- 0 可以看出表customers的列CUST_STATE_PROVINCE、country_id是有关系的,只有多列统计信息才能让优化器知道他们的关系,从而有一个更精确的选择性(selectiveity)。 1 、创建 Column Group :

Oracle索引碎片检查及定期重建常用表的索引

♀尐吖头ヾ 提交于 2020-01-28 01:19:19
背景说明: 今天查阅书籍时,偶然间发现“在对某个索引行执行删除操作时,只是为该行增加了一个删除标记,这个索引行并不会释放它的存储空间,Insert产生的新的索引行也不能被插入到该位置。索引列的修改过程其实是将对应的列值删除,然后再插入新的列值(与数据行本身的修改是不一致的,这也正是我们尽量不使用修改频繁的列来创建索引的原因)。所以,无论是插入、修改、删除,都需要消耗存储空间,增大B-Tree索引结构的深度,影响数据的查询速度。尤其是删除和修改,不仅造成了存储空间的浪费,而且增加了扫描索引块的数量”,这就是所谓的索引碎片问题,建议定期对经常使用的表执行检查和重建索引操作。 问题重现: 经测试,收集统计信息等操作,无法释放索引删除块所占用的存储空间。 analyze table tkk29 compute statistics; select t.index_name, t.distinct_keys, t.num_rows, t.sample_size, t.last_analyzed , t.blevel, t.leaf_blocks, t.* from user_indexes t where t.table_name = upper('tkk29'); delete from tkk29 where mod(trunc((sysdate-createddate) * 24 *

sys用户权限不足,本地登录失败 |ORA-01031 insufficient privileges|

烈酒焚心 提交于 2020-01-26 10:15:09
机器总喜欢挑放假的时候出问题,“双节”(中秋、国庆)快到了,对于搞系统运维的工程师来说其实并不轻松,于是今天赶紧装起一台数据库备用服务器以备半夜“机”叫。 安装OS就没什么好说的了,从模板机中托一个出来改改IP和HostName就完事了,安装Oracle数据库也不是第一次了,找了一个静默安装的响应文件改一下把数据库装起来,虽然计划是搭建DataGuard的,但是为了测试安装是否成功,还是选择了建库,一切装完后,例行登录数据库发现出了状况: [oracle@wz_oracle2 dbs]$ sqlplus system/oracle as sysdba SQL*Plus: Release 10.2.0.1.0 - Production on Tue Sep 21 16:41:01 2010 Copyright (c) 1982, 2005, Oracle. All rights reserved. ERROR: ORA-01031: insufficient privileges Enter user-name: 一般来说,ORA-01031都是出现在忘记输入 as sysdba 的时候出现的,这是为什么呢? 试一下其他方式登录: [oracle@wz_oracle2 dbs]$ [oracle@wz_oracle2 dbs]$ [oracle@wz_oracle2 dbs]$

Oracle影响查询效率的因素

ε祈祈猫儿з 提交于 2020-01-24 20:01:27
硬件 索引 碎片 SQL逻辑 扩展分区 数据库负载 硬件 CPU速度、内存大小、磁盘读写速度、网络传输速度 索引 是否走索引,索引是否合理 碎片 表碎片和索引碎片,可能导致使用错误的执行计划 SQL逻辑 SQL本身逻辑有问题,执行效率低 扩展分区 表和索引初始化参数配置不同,导致扩展分区大小不一,影响查询速度 数据库负载 数据库负载过重 来源: CSDN 作者: Angryshark_128 链接: https://blog.csdn.net/weixin_42078760/article/details/104079582

PL/SQL性能优化

ⅰ亾dé卋堺 提交于 2020-01-17 21:31:43
一:SQL性能优化原理 1.1sql处理体系结构 1.2执行计划 sql语句转换前的步骤: 1.语法检查:检查sql语句的拼写是否正确 2.语义分析:核实所有与数据字典不一致的表或列的名字 3.概要存储检查:检查数据字典,以确定该sql语句的概要信息是否已经存在 4.生产执行计划:使用CBO规则和数据字典中的统计表来决定最佳执行计划 5.生成二进制代码:基于执行计划,生成可执行代码 执行计划是oracle在执行每个sql语句时所采取的执行顺序. 执行计划包括: 1.语句所引用的表的顺序 2.语句所设计的表的访问方式 3.语句中连续操作所影响到的各表的连接方法 查看计划前授权: --系统用户执行 SQL > @D :\Oracle\app\oracle\product\ 10.2 .0 \server\RDBMS\ADMIN\utlxplan . sql ; --本地电脑路径,执行utlxplan.sql Table created Executed in 0.047 seconds SQL > grant plustrace to scott ; --授权 Grant succeeded Executed in 0.009 seconds --scott用户 SQL > @D :\Oracle\app\oracle\product\ 10.2 .0 \server\RDBMS

oracle资源检查

◇◆丶佛笑我妖孽 提交于 2020-01-16 02:21:17
一、查询执行最慢的sql select * from(select sa.SQL_TEXT, sa.SQL_FULLTEXT, sa.EXECUTIONS"执行次数", round(sa.ELAPSED_TIME / 1000000, 2)“总执行时间”, round(sa.ELAPSED_TIME / 1000000 / sa.EXECUTIONS, 2)“平均执行时间”, sa.COMMAND_TYPE, sa.PARSING_USER_ID"用户ID", u.username"用户名", sa.HASH_VALUE from v$sqlarea sa left join all_users u on sa.PARSING_USER_ID = u.user_id where sa.EXECUTIONS > 0 order by(sa.ELAPSED_TIME / sa.EXECUTIONS)desc) where rownum <= 50; 二、查询次数最多的 sql select * from(select s.SQL_TEXT, s.EXECUTIONS"执行次数", s.PARSING_USER_ID"用户名", rank() over(order by EXECUTIONS desc) EXEC_RANK from v$sql s left join all_users

Oracle索引大全

隐身守侯 提交于 2020-01-15 20:09:29
文档结构如下: 前言: Oracle 官方文档对索引的描述真是弱透了,对索引的说明就是一坨……,support也没有很好的资料,下面还是用的官方上的内容经过自己的整理加上网上的资料;至于为什么用索引,以及索引的重要性,相信大家都知晓;如果把数据库所有的表比如成一本书,那么,索引就是书的目录,你不可能每一次查看书的内容从第一页读到最后一页,不用目录吧!! 索引类型: 索引是与表和群集关联的可选结构,可以使SQL查询对表执行得更快。正如本手册中的索引可以帮助您更快地找到信息(没有索引)一样,Oracle数据库索引提供了对表数据的更快访问路径。您可以使用索引而无需重写任何查询。结果是相同的,但是可以更快地看到它们。 Oracle数据库提供了几种索引方案,这些方案提供了互补的性能功能。这些是: B树索引:默认索引和最常见索引 B树集群索引:专门为集群定义 哈希集群索引:专门为哈希集群定义 全局和局部索引:与分区表和索引有关 反向键索引:对Oracle Real Application Clusters应用程序最有用 位图索引:紧凑;最适合具有少量值的列 基于函数的索引:包含函数/表达式的预先计算的值 域索引:特定于应用程序或盒带。 索引在逻辑上和物理上独立于关联表中的数据。作为独立的结构,它们需要存储空间。您可以创建或删除索引,而不会影响基表,数据库应用程序或其他索引。当您插入