文档库 最新最全的文档下载
当前位置:文档库 › 集簇因子-柱状图

集簇因子-柱状图

集簇因子-柱状图
集簇因子-柱状图

列值的选择性、集簇和柱状图

切记,优化器了解表中列数据的许多重要特征,最显著的是列值的选择性和列的集簇因子以及柱状图。

例如,以下我们看到一个使用列值来形成结果集的查询:

select

customer_name

from

customer

where

customer_state = 'Rhode Island';

在此示例中,选择使用索引还是全表扫描受到罗得岛客户比例的影响。如果罗得岛客户的比例非常小,并且数值集簇在数据块中,则对于此查询而言索引扫描可能是最快的执行计划。

许多 Oracle 开发人员对于当他们只检索很少量的行时优化器选择全表扫描而感到困惑,而没有意识到优化器考虑了表中列值的集簇。

Oracle 在 dba_indexes 视图中提供一个名为 clustering_factor 的列,通知优化器关于表的行与索引的同步情况。当集簇因子接近数据块的数量时,表的行与索引同步,即相同的数据存放得比较集中,聚集度高。

列值的选择性、db_block_size、avg_row_len 以及集合基数全都协同工作,帮助优化器决定是使用索引还是使用全表扫描。如果数据列具有高度的选择性和低的 clustering_factor,则索引扫描通常是最快的执行方法(参见图 2)。

如果多数 SQL 引用了具有高 clustering_factor、大 db_block_size 和小avg_row_len 的列,则 DBA 有时会周期性地对表的行进行重排序或使用单表集簇来维持行的顺序。这种方法将所有相邻的行放置在同一数据块中,消除了全表扫描,使查询速度的增加高达 30 倍。

相反,高 clustering_factor 的数值达到表中的行数 (num_rows),表明这些行的顺序与索引中的顺序不同,索引范围扫描将会需要额外的 I/O。由于clustering_factor 达到表中的行数,这些行与索引不同步,即相同的数据存放得比较分散,聚集度低。

但是,即使列具有高度的选择性,高 clustering_factor 和小 avg_row_len 也会表示列值在表中随机分布,而获取这些行需要额外的 I/O。在此情况下,索引范围扫描会导致大量不必要的 I/O(参见图 3);全表扫描则会高效得多。

总而言之,clustering_factor、db_block_size 和 avg_row_len 全都影响优化器有关执行全表扫描或是索引范围扫描的决策,理解优化器如何使用这些统计信息非常重要。

我们已经注意到,每个新版本的优化器都有改进,并且 Oracle Database 10g提供的最新增强特性在确定执行计划时会考虑外部的影响。Oracle 称此特性为外部成本核算,并包括对 CPU 和 I/O 成本的评估。

以下例子来说明列值的集簇因子对执行计划产生的影响:

1、搭建环境

SQL> insert into test select * from emp;

14 rows created.

Commit complete.

SQL>create index test_ename_ind on test (ename);

2、分析表

SQL> analyze table test compute statistics;

Table analyzed.

3、查看列值的集簇因子:

select

t.table_name,t.NUM_ROWS,t.BLOCKS,t.A VG_ROW_LEN,i.index_name,i.CLUSTERING_FAC TOR

from dba_tables t,dba_indexes i

where t.table_name=i.table_name

and t.owner='SCOTT'

and t.table_name='TEST3';

TABLE_NAME NUM_ROWS BLOCKS A VG_ROW_LEN INDEX_NAME CLUSTERING_FACTOR ---------- ---------- ---------- ----------- ---------- -----------------

TEST 14 1 32 TEST_ENAME 1

4、使用索引列进行查询:

SQL> select * from test where ename='CUUG1';

no rows selected

Execution Plan

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

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=32)

1 0 TABLE ACCESS (FULL) OF 'TEST' (TABLE) (Cost=

2 Card=1 Bytes

=32)

Statistics

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

1 recursive calls

0 db block gets

3 consistent gets

0 physical reads

0 redo size

615 bytes sent via SQL*Net to client

376 bytes received via SQL*Net from client

1 SQL*Net roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

0 rows processed

注;这里执行计划采用全表扫描。(如果使用到了索引,那么再往表中插入一遍数据,然后做analyze,此时oracle就会选择全表扫描)

5、往test表中插入数据,注意ename列的值都不一样,也就是有很高的选择性。

declare

V_ENAME test.ename%type;

BEGIN

V_ENAME :='CUUG';

FOR I IN 1..10000 LOOP

insert into test (empno,ename,job,sal,deptno)

values (1121,V_ENAME||I,'WORKER',2000,20);

END LOOP;

COMMIT;

END;

6、然后使用索引列进行查询:

SQL> select * from test where ename='CUUG1';

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

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

1121 CUUG1 WORKER 2000 20

Execution Plan

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

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=32)

1 0 TABLE ACCESS (FULL) OF 'TEST' (TABLE) (Cost=

2 Card=1 Bytes

=32)

Statistics

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

1 recursive calls

0 db block gets

51 consistent gets

0 physical reads

0 redo size

795 bytes sent via SQL*Net to client

511 bytes received via SQL*Net from client

2 SQL*Net roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

1 rows processed

注:这里还是采用了全表扫描的执行计划,按道理列的选择性很高,A VG_ROW_LEN的值也很小,为什么没有采用索引能,一个关键的原因就是集簇因子。

因为test表曾经分析过,在dba_indexes中保留了列值的集簇因子,导致执行计划选择全表扫描。

7、如何让执行计划采用索引,需要对表test再次分析。

SQL> analyze table test compute statistics;

Table analyzed.

1 select t.table_name,t.NUM_ROWS,t.BLOCKS,t.A VG_ROW_LEN,i.index_name,i.CLUSTERING_FAC TOR

2 from dba_tables t,dba_indexes i

3 where t.table_name=i.table_name

4 and t.owner='SCOTT'

5* and t.table_name='TEST3'

SQL> /

TABLE_NAME NUM_ROWS BLOCKS A VG_ROW_LEN INDEX_NAME CLUSTERING_FACTOR

------------------------------ ---------- ---------- ----------- ------------------------------ ----------------- TEST 10014 47 32 TEST_ENAME 1920

注:这里的集簇因子的值变了。

8、再次执行查询:

SQL> select * from test where ename='CUUG1';

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

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

1121 CUUG1 WORKER 2000 20

Execution Plan

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

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=29)

1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST' (TABLE) (Cost=

2 Ca

rd=1 Bytes=29)

2 1 INDEX (RANGE SCAN) OF 'TEST_ENAME' (INDEX) (Cost=1 Card=

1)

Statistics

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

1 recursive calls

0 db block gets

4 consistent gets

0 physical reads

0 redo size

799 bytes sent via SQL*Net to client

511 bytes received via SQL*Net from client

2 SQL*Net roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

1 rows processed

注:发现这次执行计划选择了索引。

许多Oracle 开发人员对于当他们只检索很少量的行时优化器选择全表扫描而感到困惑,而没有意识到优化器考虑了表中列值的集簇。

另外,如果表包含有很多空块(delete以后),也会影响优化器的选择,比如集簇因子不同步,但是空块很多,也会影响优化器。

判断气温曲线和降水量柱状图

如何根据已知材料判断气候类型 1、根据所给的位置判定气候类型:先从纬度位置,确定已知地点位于南半球还是北半球,哪个温度带;然后从海陆位置看位于大陆西岸还是东岸;最后将已知地点落实到全球气候类型和气候分布模式图上,确定其气候类型。 2、根据所给的气温和降水资料判断气候类型,其方法和步骤如下: 第一步:根据最冷月与最热月的平均气温指标确定大致的气候类型。 操作步骤分解: A型:最冷月均温在15℃以上的为热带的四种气候类型中的一种,即热带雨林气候、热带草原气候(萨瓦那气候、热带稀树草原气候)、热带季风气候、热带沙漠气候。 B型:最冷月均温在0℃—15℃间的为亚热带季风气候(亚热带季风性湿润气候)、地中海气候、温带海洋性气候中的一种。 C型:最冷月均温在O℃以下、最热月均温在20℃以上的可能为温带季风气候、温带大陆性气候或亚寒带大陆性气候。其中温带大陆性气候最暖月均温在20℃以上,亚寒带大陆性气候最暖月均温小于20℃。 D型:苔原气候和冰原气候判别时要注意:苔原气候夏季均温在O℃以上,冰原气候所谓“暖月”均温仍在O℃以下,依据此法,即可判定具体气候类 型。第二步:根据降水量的多少、季节分配,确定具体的气候类型。 ①首先根据降水量多少划分降水类型: 多雨型:如热带雨林气候、热带季风气候、亚热带季风气候等。 少雨型:热带沙漠气候、温带大陆性气候等。 ②根据降水季节分配划分降水类型: 年雨型:热带雨林气候、温带海洋性气候等。 冬雨型:地中海气候。 夏雨型:热带草原气候、热带季风气候、亚热带季风气候、温带季风气候等。 操作步骤分解: 若判定为上述A型气候,若为年雨型的是热带雨林气候;若为夏雨型则是热带草原气候或热带季风气候,但两者也存在明显差异,前者年降水量在750毫米—1000毫米之间,后者在1500毫米—2000毫米,没有为零的月份且后者雨季降水更集中;少雨型的则为热带沙漠气候。 若判定为B型气候,则年雨型的是温带海洋性气候各月降水量均在50毫米左右;冬雨型的为地中海气候;夏雨型的为亚热带季风气候或亚热带季风性湿润气候,如判别地区在亚洲的则为亚热带季风气候,在其他地区则为后者 若判定为C型气候,为明显夏雨型的是温带季风气候,有>100毫米的月份;少雨型的则为温带大陆性气候(不包括亚寒带大陆性气候)无>100毫米的月份。

降水量柱状图及其应用-初中地理知识

降水量柱状图及其应用 【知识点的认识】 降水量柱状图是直观刻画一个地方气候降水分配状况的统计图.它一般是先充分拥有气候统计资料.再根据其数据利用坐标图进行绘制.其步骤是先绘制好横坐标刻画出月份,再绘制出纵坐标,代表降水量.再利用统计数据分月绘制出柱状图.从直观地降水量柱状图上可以看出降水集中月份,降水较少季节,各月降水量分配是否均匀等信息. 【命题的方向】 考查了对降水量柱状图及其应用的认识,难度不大,多以选择、解答形式出题. 例:读图.回答下列问题. (1)我国东南沿海地区的年降水量多在800毫米以上,而西北内陆地区则在200毫米以下. (2)我国降水分布的总趋势是从东南沿海向西北内陆递减. (3)图 A、B、C、D 分别为哈尔滨、北京、武汉和广州四城市的降水量柱状图,可以看出,我国降水集中在夏季,南方雨季较长(长或短),降水较多(多或少). 分析:我国气温分布特点为:冬季南北气温差异大,越往北气温就越低,夏季南北普遍高温;我国降水分布特点为:从东南沿海向西北内陆递减,时间分配主要集中在夏秋季节. 解答:(1)我国东南沿海地区的年降水量多在 800 毫米以上,而西北内陆降水稀少,年降水量在 200 毫米以下; (2)我国降水分布的总趋势是:从东南沿海向西北内陆递减; (3)从四城市的降水量柱状图可以看出,我国的降水主要集中在夏季,南方的雨季较长,降水也较多. 故答案为:(1)800;200;(2)从东南沿海向西北内陆递减;(3)夏;长;多. 点评:此题考查的是降水柱状图的应用. 【解题思路点拔】

熟记掌握降水量柱状图及其应用.观察降水量柱状图时,可以先看横坐标轴,它表示月份,再看左侧纵坐标轴表示降水量,最后根据各月长方形柱状的数值估出各月降水量.

世界气候类型特点分布区 气温曲线与降水量柱状图、以温定带以水定型

世界主要气候类型分布及特点

一、判断所属南北半球:依据七月左右气温高,则可推断为北半球;反之一月左右气温高,则可推断为南半球。二、.根据气温高低判断气候类型。(以北半球为例) 1、一月均温>15℃,可推断为热带气候; 2、一月均温在0℃—15℃之间时,可推断为亚热带季风气候或温带海洋性气候或地中海气候; 3、一月均温<0℃,则为温带气候或寒带气候。三、依据年降水量确定具体气候类型。 (一)、热带的四种气候类型,因气温都在15℃以上,其具体类型主要依据月降水量和年降水总量多少来区别: 1、热带雨林气候:各月降水几乎都在100mm以上,最小月也在50mm以上,年降水量在2000mm以上。 2、热带沙漠气候:各月降水量都稀少或没有,年降水量(一般)在125mm以下。 3、热带草原气候:月降水量达到或超过200mm的月份数少于3个月,年总降水量在750-1000mm之间。 4、热带季风气候:月降水量达到或超过200mm的月份数大于3个月,年总降水量在1500mm-2000mm之间。 (二)亚热带季风气候、地中海气候、温带海洋性气候三种,一月均温都在 0℃-15℃之间,其具体类型主要依据季节和年份降水量的多少来区别: 1、亚热带季风气候:夏季降水多、冬季降水少,年降水量在800-1600mm之间。 2、地中海气候:冬季降水多,夏季降水少,年降水量在300-1000mm之间。 3、温带海洋性气候:各月降水较均匀,气温年较差也较小,年降水量在 700-1000mm之间。 (三)温带大陆性气候,温带季风气候的降水量都是夏季多,冬季少。其具体类型主要依据是月降水量大于或等于100mm的月份数和年降水量来区别: 1.温带大陆性气候:月降水量大于或等于100mm的月份数小于2个月,年总降水量在200mm左右。 2.温带季风气候:月降水量大于或等于100mm的月份数大于或等于2个月,年总降水量在500mm-1000mm左右

相关文档
相关文档 最新文档