索引使用的好处与坏处(Oracle测试)(上)

简介: 索引使用的好处与坏处(Oracle测试)(上)

创建索引的好处

–帮助用户提高查询速度


–利用索引的唯一性来控制记录的唯一性


–可以加速表与表之间的连接


–降低查询中分组和排序的时间


创建索引的坏处

–存储索引占用磁盘空间


–执行数据修改操作(INSERT、UPDATE、DELETE)产生索引维护


----------------------------------------------------------------------------------------------


索引是提高数据查询最有效的方法,也是最难全面掌握的技术,因为正确的索引可能使效率提高10000倍,而无效的索引可能是浪费了数据库空间,甚至大大降低查询性能。


 索引的管理成本

 1、 存储索引的磁盘空间


 2、 执行数据修改操作(INSERT、UPDATE、DELETE)产生的索引维护


 3、 在数据处理时回需额外的回退空间。


 实际数据修改测试:

 一个表有字段A、B、C,同时进行插入10000行记录测试


 在没有建索引时平均完成时间是2.9秒


 在对A字段建索引后平均完成时间是6.7秒


 在对A字段和B字段建索引后平均完成时间是10.3秒


 在对A字段、B字段和C字段都建索引后平均完成时间是11.7秒


 从以上测试结果可以明显看出索引对数据修改产生的影响


 索引按存储方法分类

 B*树索引

 B*树索引是最常用的索引,其存储结构类似书的索引结构,有分支和叶两种类型的存储数据块,分支块相当于书的大目录,叶块相当于索引到的具体的书页。一般索引及唯一约束索引都使用B*树索引。


 位图索引

 位图索引储存主要用来节省空间,减少ORACLE对数据块的访问,它采用位图偏移方式来与表的行ID号对应,采用位图索引一般是重复值太多的表字段。位图索引在实际密集型OLTP(数据事务处理)中用得比较少,因为OLTP会对表进行大量的删除、修改、新建操作,ORACLE每次进行操作都会对要操作的数据块加锁,所以多人操作很容易产生数据块锁等待甚至死锁现象。在OLAP(数据分析处理)中应用位图有优势,因为OLAP中大部分是对数据库的查询操作,而且一般采用数据仓库技术,所以大量数据采用位图索引节省空间比较明显。


 索引按功能分类

 唯一索引

 唯一索引有两个作用,一个是数据约束,一个是数据索引,其中数据约束主要用来保证数据的完整性,唯一索引产生的索引记录中每一条记录都对应一个唯一的ROWID。


 主关键字索引

 主关键字索引产生的索引同唯一索引,只不过它是在数据库建立主关键字时系统自动建立的。


 一般索引

 一般索引不产生数据约束作用,其功能主要是对字段建立索引表,以提高数据查询速度。


 索引按索引对象分类

 单列索引(表单个字段的索引)


 多列索引(表多个字段的索引)


 函数索引(对字段进行函数运算的索引)


 建立函数索引的方法:

 create index 收费日期索引 on GC_DFSS(trunc(sk_rq))


 create index 完全客户编号索引 on yhzl(qc_bh||kh_bh)


 在对函数进行了索引后,如果当前会话要引用应设置当前会话的query_rewrite_enabled为TRUE。


 alter session set query_rewrite_enabled=true


 注:如果对用户函数进行索引的话,那用户函数应加上 deterministic参数,意思是函数在输入值固定的情况下返回值也固定。例:


 create or replace function trunc_add(input_date date)return date deterministic


 as


 begin


 return trunc(input_date+1);


 end trunc_add;


 应用索引的扫描分类


 INDEX UNIQUE SCAN(按索引唯一值扫描)


 select * from zl_yhjbqk where hbs_bh='5420016000'


 INDEX RANGE SCAN(按索引值范围扫描)


 select * from zl_yhjbqk where hbs_bh>'5420016000'


 select * from zl_yhjbqk where qc_bh>'7001'


 INDEX FAST FULL SCAN(按索引值快速全部扫描)


 select hbs_bh from zl_yhjbqk order by hbs_bh


 select count(*) from zl_yhjbqk


 select qc_bh from zl_yhjbqk group by qc_bh


 什么情况下应该建立索引


 表的主关键字


 自动建立唯一索引


 如zl_yhjbqk(用户基本情况)中的hbs_bh(户标识编号)


 表的字段唯一约束


 ORACLE利用索引来保证数据的完整性


 如lc_hj(流程环节)中的lc_bh+hj_sx(流程编号+环节顺序)


 直接条件查询的字段


 在SQL中用于条件约束的字段


 如zl_yhjbqk(用户基本情况)中的qc_bh(区册编号)


 select * from zl_yhjbqk where qc_bh=’7001’


 查询中与其它表关联的字段


 字段常常建立了外键关系


 如zl_ydcf(用电成份)中的jldb_bh(计量点表编号)


 select * from zl_ydcf a,zl_yhdb b where a.jldb_bh=b.jldb_bh and b.jldb_bh=’540100214511’


 查询中排序的字段


 排序的字段如果通过索引去访问那将大大提高排序速度


 select * from zl_yhjbqk order by qc_bh(建立qc_bh索引)


 select * from zl_yhjbqk where qc_bh='7001' order by cb_sx(建立qc_bh+cb_sx索引,注:只是一个索引,其中包括qc_bh和cb_sx字段)


 查询中统计或分组统计的字段


 select max(hbs_bh) from zl_yhjbqk


 select qc_bh,count(*) from zl_yhjbqk group by qc_bh


相关文章
|
1月前
|
SQL Oracle 关系型数据库
[Oracle]索引
本文介绍了数据库索引的基本概念、优化查询的原理及分类。索引是一种数据结构(如B树或B+树),通过排序后的`rowid`来优化查询性能。文章详细解释了索引的构建过程、B+树的特点及其优势,并介绍了五种常见的索引类型:唯一索引、组合索引、反向键索引、位图索引和基于函数的索引。每种索引都有其适用场景和限制,帮助读者更好地理解和应用索引技术。
62 1
[Oracle]索引
|
7月前
|
SQL Oracle 关系型数据库
oracle11g SAP测试机归档日志暴增排查(二)
oracle11g SAP测试机归档日志暴增排查(二)
338 1
|
7月前
|
Oracle 关系型数据库 Shell
oracle11g SAP测试机归档日志暴增排查(一)
oracle11g SAP测试机归档日志暴增排查(一)
86 1
|
5月前
|
监控 Oracle 关系型数据库
关系型数据库Oracle恢复测试
【7月更文挑战第20天】
96 7
|
6月前
|
运维 DataWorks Oracle
DataWorks产品使用合集之在标准模式下,当同步Oracle的表或视图时,是否需要在源端的测试和生产环境中都存在要同步的表或视图
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
51 3
|
6月前
|
SQL 存储 关系型数据库
MySQL存储过程——Baidu Comate智能代码助手添加20条DML语句——测试索引效果
MySQL存储过程——Baidu Comate智能代码助手添加20条DML语句——测试索引效果
46 0
|
3天前
|
监控 JavaScript 测试技术
postman接口测试工具详解
Postman是一个功能强大且易于使用的API测试工具。通过详细的介绍和实际示例,本文展示了Postman在API测试中的各种应用。无论是简单的请求发送,还是复杂的自动化测试和持续集成,Postman都提供了丰富的功能来满足用户的需求。希望本文能帮助您更好地理解和使用Postman,提高API测试的效率和质量。
27 11
|
1月前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
60 3
|
2月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
74 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
3月前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
262 7
Jmeter实现WebSocket协议的接口测试方法

推荐镜像

更多
下一篇
DataWorks