- 浏览: 91795 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (139)
- oracle基础 (27)
- oracle sql编程及优化 (14)
- ELK (4)
- java (11)
- java设计模式 (0)
- 互联网知识 (6)
- 安装MongoDB (1)
- MongoDB (0)
- spark (1)
- scala (1)
- spring boot (3)
- spring cloud (8)
- redis (6)
- virtualbox (3)
- docker (7)
- rabbitmq (0)
- rocketmq (2)
- k8s (8)
- ubuntu (11)
- centos (3)
- mysql (4)
- nginx (7)
- tomcat (5)
- postman (1)
- other (10)
最新评论
-
lihao312:
insert all功能好强大哦 之前都没有用到过
oracle 多表插入 insert all 用法(即列转行)
1、聚簇因子(Clustering factor)
索引行的存储顺序与表中行的存储顺序之间的相似程度。
当相似度高时,这些数据行就会密集地存储在相对较少的数据块中,这是聚簇因子比较好的情况。Oracle中,对于同一个查询语句,有时候会很快的完成,有时候却很慢,但是表结构什么的完全一致,表中的数据也完全一致,这个具体是什么原因呢,就要从Index中的细节说起了。在Oracle中的一个特殊的视图user_indexes中有一个特殊的列,名字是clustering_factor,这个值的内容就是如果访问表的整个表数据,会造成多少次数据库IO。
A:如果这个值与块数接近,则说明表相当有序,得到了很好的组织。在这种情况下,同一个叶子块中的索引条目可能指向同一个数据块中的行。(clustering_factor=blocks 好)
B:如果这个值与行数接近,表的次序可能就是非常随机的。在这种情况下,同一个叶子块上的索引条目不太可能指向同一个数据块上的行。(clustering_factor=num_rows 不好)
可以把聚簇因子看作是通过索引读取整个表时对表执行的逻辑I/O次数。也就是说聚簇因子指示了表相对于索引本身的有序程度。当oracle对索引结构执行区间扫描时,如果它发现索引中的下一行与前一行在同一个数据块上,就不会再执行另一个I/O从缓冲区缓存中获得表块。它已经有了表块的一个句柄,只需要直接使用就行了。不过,如果下一行不在同一个块上,就会释放当前的这个块,而执行另一个物理I/O在缓冲区缓存存放要处理的下一个块。
另外还要记住:对于一个表来说,一般只有一个索引能够有合适的聚簇因子!表中的行可能只以一种方式排序。
我们可以通过下面的SQL语句来查看。
select T.TABLE_NAME || '.' || I.index_name IDX_NAME, I.clustering_factor, T.BLOCKS, T.NUM_ROWS from user_indexes i, user_tables t where i.table_name = t.TABLE_NAME and t.TABLE_NAME = ? ORDER BY T.TABLE_NAME, I.table_NAME;
在这个SQL语句中,?代表的就是我们要检索的Index的名称。在表中数据有时候属于无序状态,这个时候的CLUSTERING_FACTOR比较接近NUM_ROWS,说明如果扫描整个表,每次都要根据Index来读取相应行的RowID,这个时候的IO操作很多,自然检索时间会比较长。如果数据有序的话,CLUSTERING_FACTOR比较接近BLOCKS,说明相邻的数据在一个块中,减少了IO操作数量,自然检索时间会大大降低。
2、准备实验条件
CREATE TABLE test_1 AS SELECT ROWNUM rn, a.* FROM all_objects a ORDER BY object_name DESC ; CREATE INDEX ind_test_1 ON test_1(rn); CREATE TABLE test_2 AS SELECT * FROM (SELECT ROWNUM rn, a.* FROM all_objects a) ORDER BY rn ASC ; CREATE INDEX ind_test_2 ON test_2(rn);
SQL> EXEC DBMS_STATS.gather_table_stats('USERS','TEST_1'); SQL> EXEC DBMS_STATS.gather_table_stats('USERS','TEST_2'); SQL> EXEC DBMS_STATS.gather_index_stats('USERS', 'IND_TEST_1'); SQL> EXEC DBMS_STATS.gather_index_stats('USERS', 'IND_TEST_2');
3、执行查询操作
SELECT * FROM tEST_1 WHERE rn BETWEEN 10000 AND 10200;
统计信息
----------------------------------------------------------
0 recursive calls
0 db block gets
85 consistent gets
0 physical reads
0 redo size
11897 bytes sent via SQL*Net to client
543 bytes received via SQL*Net from client
15 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
201 rows processed
SELECT * FROM tEST_2 WHERE rn BETWEEN 10000 AND 10200;
统计信息
----------------------------------------------------------
1 recursive calls
0 db block gets
35 consistent gets
0 physical reads
0 redo size
11897 bytes sent via SQL*Net to client
543 bytes received via SQL*Net from client
15 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
201 rows processed
4、观察试验结果
通过执行统计信息观察,test_1表的查询一致读是85,而test_2表的一致读只有35,竟然test_1的一致读尽然是test_2的2倍还多,是不是有点奇怪,同样的表结构,同样的数据(test_2多两条数据)
5、分析原因
select T.TABLE_NAME || '.' || I.index_name IDX_NAME, I.clustering_factor, T.BLOCKS, T.NUM_ROWS from user_indexes i, user_tables t where i.table_name = t.TABLE_NAME and t.TABLE_NAME IN( 'TEST_1','TEST_2') ORDER BY T.TABLE_NAME, I.table_NAME;
IDX_NAME
CLUSTERING_FACTOR
BLOCKS
NUM_ROWS
TEST_1.IND_TEST_1
26358
747
50490
TEST_2.IND_TEST_2
727
747
50492
发表评论
文章已被作者锁定,不允许评论。
-
oracle instr substr结合截取字符串
2014-10-11 11:44 0select substr(email, ... -
oracle is null 优化
2014-05-25 22:17 1269select * from emp where sys_op ... -
Oracle like 优化
2014-05-25 21:02 10891。尽量不要使用 like '%%' 2。对于 like ... -
SQL语句去掉重复数据
2014-03-17 16:07 637有的时候会有部分字段重复,比如ID值不一样,但EMAIL一样 ... -
in和or的性能区别
2012-11-23 16:29 0or会走索引 -
关于计划的稳定性与控制
2012-11-09 17:11 626oracle的基于成本的优化器(CBO)最令人郁闷 ... -
Oracle表与索引的分析及索引重建
2012-11-05 15:22 0转载:Oracle表与索引的分析及索引重建 ... -
ORACLE直方图学习笔记
2012-11-05 14:43 550引用:ORACLE直方图学习笔记 关于直方图的 ... -
oracle 索引介绍(二)
2012-11-05 11:31 639索引也可以像 ... -
oracle 索引介绍(一)
2012-11-05 11:31 703索引广义上可以分为3类:B-树索引、位图索引以及索引组织表。 ... -
analyze和dbms_stats函数的区别
2012-10-31 18:08 677analyze和dbms_stats函数都是收集一些统计信息, ... -
oracle 执行计划
2012-10-31 18:08 687解释计划 语句EXPLAI ... -
oracle表联结方法
2012-10-29 16:22 657联结的方法有:嵌套循环联结、散列联结、排序-合并联结 ... -
oracle数据访问途径之索引扫描
2012-10-29 16:22 681oracle总共只有两种基本 ... -
oracle数据访问途径之全扫描
2012-10-29 16:22 614oracle总共只有两种基本 ... -
autotrace 命令
2012-10-24 10:06 671在SQL*Plus中,你可以通过设置autotrace ...
相关推荐
一个较低的聚簇因子意味着索引记录与其对应的数据行在磁盘上是相邻或接近的,这样在通过索引查找数据时,访问的数据块数量就会减少,从而提高查询性能。 然而,仅仅看聚簇因子的数值是没有意义的,必须将其与表中的...
聚簇索引和非聚簇索引有着不同的体系结构和适用情况,创建合适的索引并适当设置填充因子,是优化数据库性能的有效手段。在设计和优化数据库系统时,必须根据实际的数据访问模式和查询类型,仔细考虑是否使用以及如何...
聚宽因子数据获取方法说明.ipynb
华泰证券-多因子系列之四:单因子测试之动量类因子 在本报告中,华泰证券研究团队对动量类因子的单因子测试进行了深入分析和研究。动量因子是一类非常重要的风格因子,能够反映股票的短期价格变化特征。本报告选取...
脉冲因子、波形因子、裕度因子、峰值因子、偏度、峭度.m
在IT领域,特别是数据分析和经济建模中,"MS-ragged_马尔科夫转换_混频MS动态因子模型_动态因子_动态因子模型_混频动态因子_源码"这个主题涉及到一系列高级技术,包括马尔科夫区制转换(Markov Switching, MS)、...
接着,五因子模型是法玛和弗伦奇在2014年进一步发展的理论,增加了两个新的因子:盈利能力因子(Profitability)和投资因子(Investment)。盈利能力因子反映的是公司盈利能力和股权回报之间的关系,而投资因子则...
在金融领域,Fama-French三因子模型和五因子模型是两种重要的资产定价模型,用于解释股票收益的差异。这两个模型是由经济学家Eugene Fama和Kenneth French提出的,它们试图解释除了市场风险之外,哪些因素可以影响...
因子图(Factor Graph)是图形模型中的一种,广泛应用于数据融合、传感器定位、机器学习等领域。GTSAM(Google's Template System for Algebraic Modeling)是一个开源的C++库,专门设计用于高效地处理因子图问题。...
IPCC碳排放因子数据库是一个重要的工具,用于查找碳排放因子和其他相关参数。该数据库不仅包含IPCC的默认数据,还纳入了来自同行评审期刊和其他出版物(包括国家清单报告)的数据,为估算温室气体排放和减排提供了...
量价因子是指影响股票价格的各种因素,包括规模因子、换手率因子、成交类因子和动量因子等。这些因子可以影响股票的价格走势和投资回报。 1. 规模因子:规模因子是指股票的规模对其价格的影响,包括市值、流通市值...
Python多因子选股模型 1.因子数据合并 2.行业中性化 3.数据标准化 4.异常值数据和离群点处理 5.PCA因子合成 6.等权重因子合成 7.综合打分法(IC值计算) 8.策略回测:选取前排名前20只股票买入 9.收益曲线绘制 包含...
本表以Fama-French三因子资产定价模型为依据,提供市场溢酬因子(Rm-Rf),市值因子(SMB)和账面市值比因子(HML)的月序列数据。 表中计算所用的无风险收益数据选择标准为:开始--2002年8月6日用三个月期定期银行...
多因子模型的理论基础源自于套利定价理论(APT),其一般表达式为:r̃=∑∗̃+ј̃,在这里,表示股票ј在因子k上的因子暴露(因子载荷),k̃表示因子k的因子收益,uј̃表示股票ј的残差收益率。该模型通过...
9.因子载荷量矩阵和因子结构矩阵 10.Promax法 11.能够假定的公共因子个数的上限 12.主因子法和Varimax法真的过时了吗 13.因子分析中的术语 附录 各种各样的分析方法 1.多变量分析 1.1 多变量分折的概要 1.2 重...
因子分析是一种统计方法,常用于社会科学、市场研究和数据分析领域,旨在从一组相关的变量中提取出少数几个潜在的、不可观测的因子,从而降低数据的维度。在R语言中,因子分析是一种强大的工具,能够帮助我们理解...