---------------1、---------数据、检测准备--------------------------------------------
drop table TEST1;
drop table TEST2;
--select OBJECT_ID,OBJECT_NAME,owner,created,last_ddl_time,namespace from TEST1 a;
create table TEST1 as select * from all_objects a where OBJECT_ID<=500000 order by a.OBJECT_NAME;
create table TEST2 as select * from all_objects a where OBJECT_ID<=500000 order by a.OBJECT_ID desc;
create index TEST1_IDX on TEST1(OBJECT_ID);
create index TEST2_IDX on TEST2(OBJECT_ID);
select * from TEST1;
select * from TEST2;
select count(1) from TEST1;
select count(1) from TEST2;
delete from test1 a where a.OBJECT_ID>1000000;
delete from TEST2 a where a.OBJECT_ID>1000;
declare
i NUMBER;
begin
for i in 1..1000000 loop
INSERT INTO TEST1(OBJECT_ID,OBJECT_NAME,owner,created,last_ddl_time,namespace) VALUES(13333334448+i,'杭州','HS-D90',ADD_MONTHS(SYSDATE,7),ADD_MONTHS(SYSDATE,7),i);
end LOOP;
END;
declare
i NUMBER;
begin
for i in 1..1000000 loop
INSERT INTO TEST2(OBJECT_ID,OBJECT_NAME,owner,created,last_ddl_time,namespace) VALUES(13333334448+i,'深圳','HS-D90',ADD_MONTHS(SYSDATE,7),ADD_MONTHS(SYSDATE,7),i);
end LOOP;
END;
EXEC DBMS_STATS.gather_index_stats(USER, 'TEST1_IDX');
EXEC DBMS_STATS.gather_index_stats(USER, 'TEST2_IDX');
EXEC dbms_stats.gather_table_stats(USER,'TEST1');
EXEC dbms_stats.gather_table_stats(USER,'TEST2');
select b.table_name,
a.index_name,
b.num_rows,
b.blocks,
a.clustering_factor
from user_indexes a, user_tables b
where b.table_name in ('TEST1', 'TEST2')
and a.table_name = b.table_name;
----------------------------------------------------------
---2、-----执行比较------------------------------------------------------------------------------
--1、TEST2 cf值与block值相同情况下校验(表数据1万,5万,5万+,百万+ 比较) cf很好
--去重性能高 rownum cg 136 740 1011 百万(0 recursive calls 0 db block gets 8470 consistent gets 8466 physical reads)
select t.OBJECT_ID,t.OBJECT_NAME,t.owner
from (select a.OBJECT_ID,a.OBJECT_NAME,a.owner,
row_number() over(partition by a.OBJECT_ID order by rownum) rn
from TEST2 a) t
where t.rn = 1;
--去重比较 rowid 性能中等 cg 795 856 1169 百万(83 recursive calls 305 db block gets 11016 consistent gets 18759 physical reads)
select a.OBJECT_ID,a.OBJECT_NAME,a.owner
from TEST2 a
where a.rowid =
(select min(rowid) from TEST2 b where b.OBJECT_ID = a.OBJECT_ID);
--去重查询方法二:根据rownum,性能差 cg 101450 太慢不用测了
select *
from (select a.OBJECT_ID,a.OBJECT_NAME,a.owner, rownum rn from TEST1 a) x
where x.rn in (select min(rownum) from TEST2 group by OBJECT_ID)
order by OBJECT_ID asc;
-------------------------------------------------------------
--2、TEST1 cf值与rows相近情况下校验(表数据1万,5万,5万+,百万+ 比较),cf很差
--去重性能高 rownum cg 136 740 1011 百万(43 recursive calls 3 db block gets 55363 consistent gets 60750 physical reads)
select t.OBJECT_ID,t.OBJECT_NAME,t.owner
from (select a.OBJECT_ID,a.OBJECT_NAME,a.owner,
row_number() over(partition by a.OBJECT_ID order by rownum) rn
from TEST1 a) t
where t.rn = 1;
--去重比较 rowid 性能中等 cg 797 856 1169 百万(34 recursive calls 0 db block gets 74334 consistent gets 76136 physical reads)
select a.OBJECT_ID,a.OBJECT_NAME,a.owner
from TEST1 a
where a.rowid =
(select min(rowid) from TEST1 b where b.OBJECT_ID = a.OBJECT_ID);
--去重查询方法二:根据rownum,性能差 cg 101450 太慢不用测了
select *
from (select a.OBJECT_ID,a.OBJECT_NAME,a.owner, rownum rn from TEST1 a) x
where x.rn in (select min(rownum) from TEST1 group by OBJECT_ID)
order by OBJECT_ID asc;
-----------------------------------------------------------------------------------------------------
TABLE_NAME INDEX_NAME NUM_ROWS BLOCKS CLUSTERING_FACTOR
------------------------------ ------------------------------ ---------- ---------- -----------------
TEST1 TEST1_IDX
1068142 55358 48049
TEST2 TEST2_IDX 1068143 8466 8463
----统计结论:cf值与rows、blocks值接近,说明计划会很差,性能越差,需调优cf值
---------cf调优-------------------------------------------
drop table TEST3;
create table TEST3 as select * from TEST1 order by object_id desc;
--创建索引:
create index TEST3_IDX on TEST3(object_id);
--统计索引、表
EXEC DBMS_STATS.gather_index_stats(USER, 'TEST3_IDX');
EXEC dbms_stats.gather_table_stats(USER,'TEST3');
--查看聚簇因子:
select b.table_name,
a.index_name,
b.num_rows,
b.blocks,
a.clustering_factor
from user_indexes a, user_tables b
where b.table_name in ('TEST3', 'TEST1')
and a.table_name = b.table_name;
TABLE_NAME INDEX_NAME NUM_ROWS BLOCKS CLUSTERING_FACTOR
------------------------------ ------------------------------ ---------- ---------- -----------------
TEST1 TEST1_IDX 1068142 55358 48049
TEST3 TEST3_IDX 1068142
8463 8463
--blocks与cf值一致,说明已最优
--清缓存
ALTER SYSTEM FLUSH SHARED_POOL;
ALTER SYSTEM FLUSH buffer_cache;
ALTER SYSTEM FLUSH GLOBAL CONTEXT;
--执行改造SQL set autot trace;
--去重性能高 rownum 百万(44 recursive calls 3 db block gets 8467 consistent gets 13863 physical reads)
--清缓存 百万(458 recursive calls 3 db block gets 8552 consistent gets 13881 physical reads)
select t.OBJECT_ID,t.OBJECT_NAME,t.owner
from (select a.OBJECT_ID,a.OBJECT_NAME,a.owner,
row_number() over(partition by a.OBJECT_ID order by rownum) rn
from TEST3 a) t
where t.rn = 1;
--去重比较 rowid 性能中等 百万(34 recursive calls 0 db block gets 11286 consistent gets 12560 physical reads)
--清缓存 百万(468 recursive calls 0 db block gets 11367 consistent gets 15377 physical reads)
select a.OBJECT_ID,a.OBJECT_NAME,a.owner
from TEST3 a
where a.rowid =
(select min(rowid) from TEST3 b where b.OBJECT_ID = a.OBJECT_ID);
-----------------------------------------------------------------------------------------------------
分享到:
相关推荐
SQL Server性能调优是数据库管理的关键环节,尤其对于大型企业应用来说,高效的SQL Server性能意味着更佳的用户体验和更低的运维成本。本文将从入门级的角度介绍如何进行SQL Server的性能优化,主要关注语句和存储...
**聚簇因子**(Clustering Factor, CF)是衡量索引质量的一个关键指标。它反映了索引记录与实际数据行在物理位置上的匹配程度。一个较低的聚簇因子意味着索引记录与其对应的数据行在磁盘上是相邻或接近的,这样在...
### Oracle高级SQL调优:CLUSTER_FACTOR案例研究 #### 一、引言 在Oracle数据库管理与优化领域,CLUSTER_FACTOR(简称CF)是衡量索引性能的一个关键指标。它反映了索引条目与其对应的表数据之间物理位置的接近程度...
《CF12 DB2 SQL Workshop》是一份IBM官方提供的详细教程,主要针对DB2数据库管理系统中的SQL语言进行深入讲解。本教程分为七个单元,旨在帮助用户掌握SQL在DB2环境中的核心应用,提升数据管理和分析能力。以下是各...
- 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! <项目介绍> 1、该资源内项目代码都经过测试运行成功,...
3. **CF树构建**:随着CF的增加,BIRCH将它们组织成一棵树结构,即CF树。树的根节点代表整个数据集,子节点表示更小的子集。每个内部节点都是一个CF,叶子节点则对应原始数据点或较小的聚类。这个过程允许数据的增量...
IBM DB2官方课程CF12是针对数据库管理与SQL应用的专业教程,主要聚焦于DB2数据库系统的使用和SQL语言的工作坊。在这个课程中,学员将深入理解DB2的基础概念、核心功能以及如何有效地利用SQL进行数据操作。这些知识点...
根据提供的文件信息,本文将详细介绍.NET CF中SQL CE数据库开发的核心技术。首先,让我们解释嵌入式数据库的定义及其特点,然后深入探讨SQL CE在.NET环境下的开发核心技术。我们将以C#语言为示例,介绍关键类如...
7. **性能监控与调优**:讲述如何通过SQL调优、索引优化来提升查询性能。 CF84“DB2 UDB for zOS and OS390 Database Administration Workshop Part 2”则进一步深入到: 1. **高级数据库管理**:探讨更复杂的数据...
在本主题中,我们将深入探讨"Windows Mobile 开发黄金周(3):Using SQL MOBILE on.NET CF 2.0"这一重要课题。这是一份包含PPT、视频、文档和示例的综合资源,旨在帮助开发者充分利用.NET Compact Framework 2.0在...
标题中的“自己动手编写SQL注入漏洞扫描工具”指的是创建一个能够自动检测Web应用程序是否存在SQL注入漏洞的软件。SQL注入是一种常见的网络安全威胁,攻击者通过在输入字段中插入恶意的SQL语句来操纵数据库,获取...
标题中的“CF卡制作DOS系统.rar”表明这是一个关于如何将DOS系统安装到CF卡上的教程文件。CF卡,全称CompactFlash卡,是一种早期的数字存储设备,常用于老式硬件,如数码相机和某些便携式计算机。DOS(Disk ...
### CF卡接口定义详解 #### 一、CF卡概述 CF(Compact Flash)卡是一种小型化的闪存存储设备,广泛应用于各类便携式电子设备之中,包括但不限于数码音乐播放器、数码相机、笔记本电脑及手机等。CF卡以其小巧的体积...
SQL语法简洁,使用方式灵活,功能强大,已经成为当今程序员不可或缺的技能。 本书是深受世界各地读者欢迎的SQL经典畅销书,内容丰富,文字简洁明快,针对Oracle、SQL Server、MySQL、DB2、PostgreSQL、SQLite等各种...
标题“ZLG_CF.rar_ZLG_CF_zlg_读写CF卡”表明这是一个针对ZLG开发板的CF卡读写代码资源,而“描述”中提到的“带有文件系统”则意味着该代码集不仅包含低级的I/O操作,还可能涉及更高级别的文件管理和操作。...
Siemens CF卡授权是针对Siemens SIMOTION和S120系列驱动器的固件授权机制。当CF卡中的授权丢失或是在购买CF卡后单独购买的授权,就需要将其导入CF卡中。以下将详细介绍如何找回并管理S120的CF卡授权。 首先,授权是...
本文将深入探讨“CF卡文件系统源程序”相关知识点,主要基于提供的文件列表:CF_FAT.c、CF_IO.c、test.c、CF_IO.h 和 CF_FAT.h。 1. **FAT16文件系统**: FAT16是微软开发的文件分配表(File Allocation Table)...
Sandisk cf卡专用工具修改HD模式,解决无法分区的问题,部分新卡不保证有效,注意软件只支持firmware revision已H开头的卡 sandisk公开提供ATCFWCHG.COM程序 具体如下: 将CF卡通过硬盘盒在电脑上建立分区并格式...
《easyImageWIN CF卡备份软件全面解析》 在数字化时代,摄影师和摄像师们依赖于存储卡,尤其是CF(CompactFlash)卡,来保存珍贵的影像资料。然而,数据安全始终是不可忽视的问题,一旦卡片损坏或数据丢失,可能会...