测试orcale中索引对表的查询和操作效率 影响

简介:

--oracle创建索引前后测试
--说明:数据库表operlog没有建主键,也没有建索引。现在对其建索引,测试索引对查询和操作的效率影响情况。
--operlog的表结构----------
create table LAB1107.OPERLOG
(
  LOGID     VARCHAR2(18) not null,
  OPERTABLE VARCHAR2(100) not null,
  OPERKEY   VARCHAR2(100) not null,
  OPERTYPE  VARCHAR2(10) not null,
  OPERBY    VARCHAR2(100) not null,
  OPERDATE  DATE not null,
  OPERDESC  VARCHAR2(4000) not null,
  MEMO      VARCHAR2(100)
)
tablespace LAB1107
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );
-------------------------对operlog创建索引----------------------------------
create index operlog_index on operlog (logid); --用时:12.328s
--删除索引
drop index operlog_index;
-- 查看索引个数和类别
select index_name,index_type,table_name from user_indexes order by table_name;
 
----------------------------------------------------测试语句:创建索引前后用时对比------------------------------------------------------
select count(*) from operlog   --结果:476500
--创建索引前用时:7.078s
--创建索引后用时:1.36s 
select max(logid)+1 from operlog  
--创建索引前用时:6.89s
--创建索引后用时:0.031s
select * from operlog where logid >'200904220000000001'  --21rows
--创建索引前用时:6.828s
--创建索引后用时:0.218s
select * from operlog where logid like '%20090422%'  --22rows
--创建索引前用时:7.708s
--创建索引后用时:7.172s
select * from operlog where logid = '200904240000000005' 
 --创建索引前用时:7.5s
--创建索引后用时:0.031s

------------------------------------测试插入数据:operlog-创建索引前后插入记录用时对比----------------------
--调用存储过程插入数据(writelog(....))
--test writelog(....)
 -- 无索引时:用时:6.985s
 -- 有索引时:用时:0.531s

-------------------------------------执行计划(explain plan):--all rows---创建索引前后执行成本对比-------------------------
--cost 表示成本,通过数据库io访问和cpu性能计算得来
--cadinality 根据遍历索引或者全表扫描的记录计算得来
--bytes 表示访问的数据量
--一个优化后的sql查询,以上3个值应该是越小越好。
select count(*) from operlog   --结果:476500
-- 无索引时:cost 9102 cardinality 1 bytes  --全表扫描
-- 有索引时:cost 449 cardinality 1 bytes  
--operlog_index cost 449 cardinality 358012 bytes 
select max(logid)+1 from operlog  
-- 无索引时:cost 9102 cardinality 1 bytes 11   --全表扫描
-- 有索引时:cost 3 cardinality 1 bytes 11
--operlog_index cost 3 cardinality 358012 bytes 3938132
select * from operlog where logid >'200904220000000001'  --21rows
-- 无索引时:cost 9105 cardinality 2632 bytes 5887784  --全表扫描
-- 有索引时:cost 1303 cardinality 2632 bytes 5887784
--operlog_index cost 18 cardinality 2632 bytes 
select * from operlog where logid like '%20090422%'  
-- 无索引时:cost 9106 cardinality 2632 bytes 5887784 --全表扫描
-- 有索引时:cost 9106 cardinality 2632 bytes 5887784 --全表扫描
select * from operlog where logid like '20090422'||'%%' 
-- 无索引时:cost 9106 cardinality 2632 bytes 5887784 --全表扫描
-- 有索引时:cost 1303 cardinality 2632 bytes 5887784
--operlog_index cost 18 cardinality 2632 bytes 

select * from operlog where logid = '200904240000000005' 
-- 无索引时:cost 9105 cardinality 456 bytes 1020072 --全表扫描
-- 有索引时:cost 4 cardinality 1 bytes 2237
--operlog_index cost 3 cardinality 1 bytes 
--------------总结-----------------------------------------------------------------------
索引可以很明显的提高查询的效率,对已有顺序的表的添加操作,索引不会影响操作效率。








本文转自 yuwenhu 51CTO博客,原文链接:http://blog.51cto.com/yuwenhu/153085,如需转载请自行联系原作者
目录
相关文章
|
1月前
|
SQL 消息中间件 Kafka
Apache Hudi测试、运维操作万字总结
Apache Hudi测试、运维操作万字总结
69 1
|
4月前
|
JSON 数据格式
在mPaaS中,通过Postman测试移动网关,可以按照以下步骤操作
在mPaaS中,通过Postman测试移动网关,可以按照以下步骤操作
31 2
|
5月前
|
自然语言处理 搜索推荐 Java
【网安AIGC专题10.25】9 LIBRO方法(ICSE2023顶会自动化测试生成):提示工程+查询LLM+选择、排序、后处理(测试用例函数放入对应测试类中,并解决执行该测试用例所需的依赖)
【网安AIGC专题10.25】9 LIBRO方法(ICSE2023顶会自动化测试生成):提示工程+查询LLM+选择、排序、后处理(测试用例函数放入对应测试类中,并解决执行该测试用例所需的依赖)
124 0
|
11月前
|
Java 数据库连接 mybatis
mybatis的查询结果接收测试
只有聪明人才能看见的简介~( ̄▽ ̄~)~
72 0
|
11月前
|
数据采集 安全 Java
渗透测试之常规操作
渗透测试之常规操作
|
11月前
|
SQL 测试技术 数据库
软件测试|SQL数据库相关操作,这篇文章就够了
软件测试|SQL数据库相关操作,这篇文章就够了
91 0
|
12月前
|
Oracle Java 关系型数据库
loadrunner 脚本开发-调用java jar文件远程操作Oracle数据库测试
loadrunner 脚本开发-调用java jar文件远程操作Oracle数据库测试
133 0
|
12月前
测试思想-测试方法 常用测试操作手段
测试思想-测试方法 常用测试操作手段
63 0
|
关系型数据库 MySQL
Mysql 查询B表的数据新增到A表 (已测试过)
Mysql 查询B表的数据新增到A表 (已测试过)
126 0
Mysql 查询B表的数据新增到A表 (已测试过)
|
XML Java 数据格式
Spring5学习(七):注解方式进行AOP操作 及 多种通知类型的测试
先来介绍一下AOP操作中的几个术语: 1、连接点:指类里面可以被增强的方法 2、切入点:指实际被增强的方法 3、通知:指实际增强的逻辑部分 4、切面:把通知应用到切入点的过程
Spring5学习(七):注解方式进行AOP操作 及 多种通知类型的测试