测试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,如需转载请自行联系原作者
目录
相关文章
|
5月前
|
消息中间件 Java 数据库
【消息队列开发】 实现 VirtualHostTests 类——测试虚拟主机操作
【消息队列开发】 实现 VirtualHostTests 类——测试虚拟主机操作
|
1月前
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
41 4
|
1月前
|
SQL
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
35 2
|
3月前
|
测试技术 API 开发者
Python 魔法:打造你的第一个天气查询小工具自动化测试框架的构建与实践
【8月更文挑战第31天】在这篇文章中,我们将一起踏上编程的奇妙旅程。想象一下,只需几行代码,就能让计算机告诉你明天是否要带伞。是的,你没有听错,我们将用Python这把钥匙,解锁天气预报的秘密。不论你是编程新手还是想拓展技能的老手,这篇文章都会为你带来新的视角和灵感。所以,拿起你的键盘,让我们一起创造属于自己的天气小工具吧!
|
3月前
|
JavaScript 前端开发 应用服务中间件
【qkl】JavaScript连接web3钱包,实现测试网络中的 Sepolia ETH余额查询、转账功能
【区块链】JavaScript连接web3钱包,实现测试网络中的 Sepolia ETH余额查询、转账功能
|
4月前
|
SQL DataWorks 数据可视化
DataWorks操作报错合集之测试OSS数据源的连通性时,出现503 Service Temporarily Unavailable的错误,是什么导致的
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
5月前
|
JSON Java 测试技术
SpringBoot实用开发篇第二章(测试操作)
SpringBoot实用开发篇第二章(测试操作)
|
5月前
|
SQL DataWorks 数据处理
DataWorks操作报错合集之在创建ES的数据源时,测试连通性提示无法连通,出现报错,如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
5月前
|
消息中间件 Java 测试技术
【消息队列开发】 测试MessageFileManager(对硬盘中的消息操作)类
【消息队列开发】 测试MessageFileManager(对硬盘中的消息操作)类
|
5月前
|
SQL 存储 关系型数据库
MySQL存储过程——Baidu Comate智能代码助手添加20条DML语句——测试索引效果
MySQL存储过程——Baidu Comate智能代码助手添加20条DML语句——测试索引效果
42 0