PL/SQL之索引和分区

一、索引 --index      

        数据库中的索引和目录的概念类似,如果某个列出现在查询的条件中,而该列的数据是无序的,那么查询时只能一行一行去扫描。

        创建索引就是对某些特定列中的数据进行排序,生成独立的索引表, 当在某个列上建立索引之后,如果这个列出现在查询条件中,oracle执行引擎会比较全表扫描和索引扫描的代价,如果索引扫描的代价小,就会自定使用该索引。先从索引表中找出符合记录的rowid,然后根据rowid回去到具体的数据 ,表中数据非常多的时候,使用索引带来的效率非常可观 。

1、什么时候应该创建索引 

(1)、表中的某些字段经常作为查询条件出现时,可以在该字段建立索引 。
(2)、经常作为关联条件的字段也可以建立索引,有一个基本准则:当任何当个查询的行数少于会等于全表行数的10% 索引就很有用 。

2、索引的缺陷 

        数据在进行增删改时需要更新索引  所以索引对数据修改有负面的影响。

3、创建索引

        oracle会为表的主键和包含唯一约束的列自动建立唯一索引,唯一索引不允许有重复值。

语法:
CREATE [UNIQUE] INDEX INDEX_NAME ON TABLE_NAME(列。。。。)
1、UNIQUE 建立唯一索引
2、index_name   索引的名字
3、table_name   建立索引的表

CREATE TABLE EMP_1 AS SELECT * FROM EMP;--创建一个表,数据同EMP
SELECT * FROM EMP_1; 

--在emp_1上建立唯一索引
CREATE UNIQUE INDEX UN_INDEX_EMP_1 ON EMP_1(EMPNO);
--建立普通索引
CREATE INDEX INDEX_EMP_1 ON EMP_1(DEPTNO);

4、查看 代码的执行计划

--查看执行计划 
1、选中代码  按f5(plsqldeveloper)
SELECT * 
FROM EMP_1 
WHERE EMPNO=7369;

2、命令行中:1)EXPLAIN PLAN FOR 查询语句
             2)SELECT PLAN_TABLE_OUTPUT 
               FROM TABLE(DBMS_XPLAN.display('PLAN_TABLE'));
             或 SELECT * FROM TABLE(DBMS_XPLAN.display);

5、组合索引、删除索引

        创建组合索引 
1、何时创建:当两个或多个列经常一起出现在where条件中,则可以建立组合索引 。
2、组合索引中列的顺序是任意的 也无需相邻 但是建议将最频繁访问的列放在最前面 。
注:组合索引的第一个为引导列(可以把经常使用的作为引导列)。

--删除索引的语法:
DROP INDEX 索引名
DROP INDEX INDEX_EMP_1;

--建立组合索引
CREATE INDEX IND_J_D ON EMP_1(JOB,DEPTNO);
SELECT * 
FROM EMP_1
WHERE JOB='CLERK',DEPTNO=20;

6、几种情况下的索引失效 

1、隐式转换导致索引失效 (现实中常犯的错误)
SELECT * 
FROM EMP_1 
WHERE JOB='12345';

SELECT * 
FROM EMP_1
where JOB=12345; --索引失效

2、对索引列使用运算会导致索引失效(+-*/)
错误:SELECT * FROM EMP WHERE SAL+500>3000;
正确:SELECT * FROM EMP WHERE SAL>3000-500;

3、使用数据库内部函数导致索引失效(可以建立函数索引)
SELECT * 
FROM EMP_1
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1章 全局在胸——用工具对SQL整体优化 1 1.1 都有哪些性能工具 1 1.1.1 不同调优场景分析 2 1.1.2 不同场景对应工具 2 1.2 整体性能工具的要点 4 1.2.1 五大性能报告的获取 5 1.2.2 五大报告关注的要点 10 1.3 案例的分享与交流 18 1.3.1 和并行等待有关的案例 18 1.3.2 和热块竞争有关的案例 19 1.3.3 和日志等待有关的案例 20 1.3.4 新疆某系统的前台优化 20 1.3.5 浙江某系统的调优案例 21 1.4 本章总结延伸与习题 21 1.4.1 总结延伸 21 1.4.2 习题训练 23 第2章 风驰电掣——有效缩短SQL优化过程 24 2.1 SQL调优时间都去哪儿了 25 2.1.1 不善于批处理频频忙交互 25 2.1.2 无法抓住主要矛盾瞎折腾 25 2.1.3 未能明确需求目标白费劲 26 2.1.4 没有分析操作难度乱调优 26 2.2 如何缩短SQL调优时间 27 2.2.1 先获取有助调优的数据库整体信息 27 2.2.2 快速获取SQL运行台前信息 27 2.2.3 快速拿到SQL关联幕后信息 28 2.3 从案例看快速SQL调优 29 2.3.1 获取数据库整体的运行情况 29 2.3.2 获取SQL的各种详细信息 29 2.4 本章总结延伸与习题 32 2.4.1 总结延伸 32 2.4.2 习题训练 33 第3章 循规蹈矩——如何读懂SQL执行计划 34 3.1 执行计划分析概述 35 3.1.1 SQL执行计划是什么 35 3.1.2 统计信息用来做什么 36 3.1.3 数据库统计信息的收集 37 3.1.4 数据库的动态采样 37 3.1.5 获取执行计划的方法(6种武器) 40 3.2 读懂执行计划的关键 48 3.2.1 解释经典执行计划方法 49 3.2.2 总结说明 55 3.3 从案例辨别低效SQL 55 3.3.1 从执行计划读出效率 56 3.3.2 执行计划效率总结 60 3.4 本章习题、总结与延伸 60 第4章 运筹帷幄——左右SQL执行计划妙招 62 4.1 控制执行计划的方法综述 63 4.1.1 控制执行计划的意义 63 4.1.2 控制执行计划的思路 64 4.2 从案例探索其方法及意义 65 4.2.1 HINT的思路 65 4.2.2 非HINT方式的执行计划改变 72 4.2.3 执行计划的固定 100 4.3 本章习题、总结与延伸 102 第5章 且慢,感受体系结构让SQL飞 103 5.1 体系结构知识 104 5.1.1 组成 104 5.1.2 原理 104 5.1.3 体会 105 5.2 体系与SQL优化 106 5.2.1 与共享池相关 107 5.2.2 数据缓冲相关 111 5.2.3 日志归档相关 116 5.3 扩展优化案例 118 5.3.1 与共享池相关 118 5.3.2 数据缓冲相关 122 5.3.3 日志归档相关 126 5.4 本章习题、总结与延伸 130 第6章 且慢,体验逻辑结构让SQL飞 132 6.1 逻辑结构 132 6.2 体系细节与SQL优化 133 6.2.1 Block 133 6.2.2 Segment与extent 137 6.2.3 Tablespace 139 6.2.4 rowid 139 6.3 相关优化案例分析 140 6.3.1 块的相关案例 141 6.3.2 段的相关案例 144 6.3.3 表空间的案例 148 6.3.4 rowid 151 6.4 本章习题、总结与延伸 153 第7章 且慢,探寻表的设计让SQL飞 154 7.1 表设计 154 7.1.1 表的设计 155 7.1.2 其他补充 155 7.2 表设计与SQL优化 156 7.2.1 表的设计 156 7.2.2 其他补充 179 7.3 相关优化案例分析 184 7.3.1 分区表相关案例 185 7.3.2 全局临时表案例 190 7.3.3 监控异常的表设计 195 7.3.4 表设计优化相关案例总结 199 7.4 本章习题、总结与延伸 199 第8章 且慢,学习索引如何让SQL飞 200 8.1 索引知识要点概述 201 8.1.1 索引结构的推理 201 8.1.2 索引特性的提炼 204 8.2 索引SQL优化 206 8.2.1 经典三大特性 207 8.2.2 组合索引选用 217 8.2.3 索引扫描类型的分类与构造 219 8.3 索引相关优化案例 225 8.3.1 三大特性的相关案例 225 8.3.2 组合索引的经典案例 231 8.4 本章习题、总结与延伸 234 第9章 且慢,弄清索引之阻碍让SQL飞 23
Oracle的高阶SQL包括了一系列强大的功能和特性,可以帮助用户更高效地管理和查询数据库。以下是一些Oracle高阶SQL的特性和功能: 1. 子查询:Oracle支持在查询语句中嵌套子查询,可以在一个查询中使用另一个查询的结果作为条件或数据源。 2. 连接查询:通过使用JOIN关键字,可以将多个表连接起来,实现数据的联合查询。 3. 视图:视图是虚拟的表,它是基于一个或多个表的查询结果构建的。通过视图,可以简化复杂的查询操作,并提供更好的数据安全性。 4. 窗口函数:窗口函数是一种特殊的函数,它可以在查询结果集中进行计算,并返回每一行的结果。常见的窗口函数包括RANK、ROW_NUMBER、SUM等。 5. 分析函数:分析函数是一种用于在查询结果中进行分组和排序的函数。它可以对查询结果进行分区、排序和聚合操作,常见的分析函数包括LAG、LEAD、RANK等。 6. PL/SQLPL/SQL是Oracle数据库的编程语言,它结合了SQL和过程化编程语言的特点,可以用于编写存储过程、触发器和函数等数据库对象。 7. 索引索引是一种数据结构,用于加快数据库查询的速度。Oracle支持多种类型的索引,包括B树索引、位图索引和哈希索引等。 8. 分区表:分区表是将大型表分割成更小的逻辑部分,以提高查询和维护的效率。Oracle支持基于范围、列表和哈希等方式进行表的分区。 9. 数据库链接:通过数据库链接,可以在一个数据库中访问另一个数据库中的数据。这对于跨数据库查询和数据共享非常有用。 10. 数据库安全性:Oracle提供了丰富的安全性功能,包括用户管理、角色管理、权限管理和数据加密等,以保护数据库的安全性和完整性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值