仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 917|回复: 8
打印 上一主题 下一主题

[学习教程] MYSQL网页设计Oracle 10g(10.1.0.2)中的OPTIMIZER_IN...

[复制链接]
若相依 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:40:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
客户还是可以使用DBaaS系统所能提供的所有能力。数据库云服务消除了组织对专职人员、本地数据库存储设备的需要。他们不必安装、配置和维护任何软硬件。oracle
Oracle10g(10.1.0.2)中的OPTIMIZER_INDEX_COST_ADJ

TomKyte的旧书EffectiveOraclebyDesign的第6章GettingtheMostOutoftheCost-BasedOptimizer中先容了参数OPTIMIZER_INDEX_COST_ADJ,并以为能够了解为Oracle实行多块(MultiBlock)I/O(好比全表扫描)的价值与实行单块(Single-block)I/O价值的绝对比例。Tom指出,9i下该参数缺省值为100,意即两者具有不异的价值,若减小,则CBO偏向于利用索引(即单块I/O),反之则偏向于全表扫描(多块I/O)。Tom一样给出了一个不错的例子。
在本人的手提上实验了一下,硬盘巨细缘故原由,只装了一个Oracle10g(10.1.0.2),谁知就发明该参数在10g下取值产生了改动。我们先来看一下参照Tom的实行:
A.创立数据表。
SQL>droptablet1;

表已删除。

SQL>droptablet2;

表已删除。

SQL>createtablet1
2as
3selectmod(rownum,1000)id,rpad(x,300,x)data
4fromall_objects
5whererownum<=5000;

表已创立。

SQL>ed
已写进fileafiedt.buf

1createtablet2
2as
3selectrownumid,rpad(x,300,x)data
4fromall_objects
5*whererownum<=1000
SQL>/

表已创立。

B.创立索引并剖析。
SQL>createindexidx_t1ont1(id);

索引已创立。

SQL>createindexidx_t2ont2(id);

索引已创立。

SQL>ed
已写进fileafiedt.buf

1begin
2dbms_stats.gather_table_stats
3(user,T1,method_opt=>forallindexedcolumns,cascade=>true);
4dbms_stats.gather_table_stats
5(user,T2,method_opt=>forallindexedcolumns,cascade=>true);
6*end;
SQL>/

PL/SQL历程已乐成完成。

C.查询缺省值,并设置好情况。
SQL>setautotoff
SQL>showparametersoptimizer_index_cost_adj;

NAMETYPEVALUE
-----------------------------------------------------------------------------
optimizer_index_cost_adjinteger100
SQL>setautottraceonlyexpstat;

D.在缺省值下查询的了局。
SQL>ed
已写进fileafiedt.buf

1select*fromt1,t2
2wheret1.id=t2.id
3*andt2.idbetween50and55
SQL>/

已选择30行。


实行企图
----------------------------------------------------------
0SELECTSTATEMENTOptimizer=CHOOSE(Cost=13Card=5Bytes=1000
)

10TABLEACCESS(BYINDEXROWID)OFT1(TABLE)(Cost=2Card
=1Bytes=100)

21NESTEDLOOPS(Cost=13Card=5Bytes=1000)
32TABLEACCESS(BYINDEXROWID)OFT2(TABLE)(Cost=3
Card=5Bytes=500)

43INDEX(RANGESCAN)OFIDX_T2(INDEX)(Cost=2Card=
5)

52INDEX(RANGESCAN)OFIDX_T1(INDEX)(Cost=1Card=1)




统计信息
----------------------------------------------------------
367recursivecalls
0dbblockgets
101consistentgets
0physicalreads
0redosize
1507bytessentviaSQL*Nettoclient
523bytesreceivedviaSQL*Netfromclient
3SQL*Netroundtripsto/fromclient
12sorts(memory)
0sorts(disk)
30rowsprocessed

E.修正参数值,注重,援用Tom的结论,9i中这个值在0-100之间,而10g呢?
SQL>altersessionsetoptimizer_index_cost_adj=0;
ERROR:
ORA-00068:值0对参数optimizer_index_cost_adj有效,必需在1和10000之间


SQL>altersessionsetoptimizer_index_cost_adj=1;

会话已变动。

SQL>ed
已写进fileafiedt.buf

1select*fromt1,t2
2wheret1.id=t2.id
3*andt2.idbetween50and55
SQL>/

已选择30行。


实行企图
----------------------------------------------------------
0SELECTSTATEMENTOptimizer=CHOOSE(Cost=2Card=5Bytes=1000)
10TABLEACCESS(BYINDEXROWID)OFT1(TABLE)(Cost=1Card
=1Bytes=100)

21NESTEDLOOPS(Cost=2Card=5Bytes=1000)
32TABLEACCESS(BYINDEXROWID)OFT2(TABLE)(Cost=1
Card=5Bytes=500)

43INDEX(RANGESCAN)OFIDX_T2(INDEX)(Cost=2Card=
5)

52INDEX(RANGESCAN)OFIDX_T1(INDEX)(Cost=1Card=1)




统计信息
----------------------------------------------------------
1recursivecalls
0dbblockgets
48consistentgets
0physicalreads
0redosize
1507bytessentviaSQL*Nettoclient
523bytesreceivedviaSQL*Netfromclient
3SQL*Netroundtripsto/fromclient
0sorts(memory)
0sorts(disk)
30rowsprocessed

SQL>altersessionsetoptimizer_index_cost_adj=50;

会话已变动。

SQL>ed
已写进fileafiedt.buf

1select*fromt1,t2
2wheret1.id=t2.id
3*andt2.idbetween50and55
SQL>/

已选择30行。


实行企图
----------------------------------------------------------
0SELECTSTATEMENTOptimizer=CHOOSE(Cost=7Card=5Bytes=1000)
10TABLEACCESS(BYINDEXROWID)OFT1(TABLE)(Cost=1Card
=1Bytes=100)

21NESTEDLOOPS(Cost=7Card=5Bytes=1000)
32TABLEACCESS(BYINDEXROWID)OFT2(TABLE)(Cost=2
Card=5Bytes=500)

43INDEX(RANGESCAN)OFIDX_T2(INDEX)(Cost=2Card=
5)

52INDEX(RANGESCAN)OFIDX_T1(INDEX)(Cost=1Card=1)




统计信息
----------------------------------------------------------
1recursivecalls
0dbblockgets
48consistentgets
0physicalreads
0redosize
1507bytessentviaSQL*Nettoclient
523bytesreceivedviaSQL*Netfromclient
3SQL*Netroundtripsto/fromclient
0sorts(memory)
0sorts(disk)
30rowsprocessed

F.持续修正参数值,改年夜。
SQL>altersessionsetoptimizer_index_cost_adj=200;

会话已变动。

SQL>ed
已写进fileafiedt.buf

1select*fromt1,t2
2wheret1.id=t2.id
3*andt2.idbetween50and55
SQL>/

已选择30行。


实行企图
----------------------------------------------------------
0SELECTSTATEMENTOptimizer=CHOOSE(Cost=26Card=5Bytes=1000
)

10TABLEACCESS(BYINDEXROWID)OFT1(TABLE)(Cost=4Card
=1Bytes=100)

21NESTEDLOOPS(Cost=26Card=5Bytes=1000)
32TABLEACCESS(BYINDEXROWID)OFT2(TABLE)(Cost=6
Card=5Bytes=500)

43INDEX(RANGESCAN)OFIDX_T2(INDEX)(Cost=2Card=
5)

52INDEX(RANGESCAN)OFIDX_T1(INDEX)(Cost=1Card=1)




统计信息
----------------------------------------------------------
1recursivecalls
0dbblockgets
48consistentgets
0physicalreads
0redosize
1507bytessentviaSQL*Nettoclient
523bytesreceivedviaSQL*Netfromclient
3SQL*Netroundtripsto/fromclient
0sorts(memory)
0sorts(disk)
30rowsprocessed

SQL>altersessionsetoptimizer_index_cost_adj=500;

会话已变动。

SQL>ed
已写进fileafiedt.buf

1select*fromt1,t2
2wheret1.id=t2.id
3*andt2.idbetween50and55
SQL>/

已选择30行。


实行企图
----------------------------------------------------------
0SELECTSTATEMENTOptimizer=CHOOSE(Cost=63Card=5Bytes=1000
)

10TABLEACCESS(BYINDEXROWID)OFT1(TABLE)(Cost=10Car
d=1Bytes=100)

21NESTEDLOOPS(Cost=63Card=5Bytes=1000)
32TABLEACCESS(FULL)OFT2(TABLE)(Cost=13Card=5By
tes=500)

42INDEX(RANGESCAN)OFIDX_T1(INDEX)(Cost=1Card=1)




统计信息
----------------------------------------------------------
1recursivecalls
0dbblockgets
90consistentgets
0physicalreads
0redosize
1507bytessentviaSQL*Nettoclient
523bytesreceivedviaSQL*Netfromclient
3SQL*Netroundtripsto/fromclient
0sorts(memory)
0sorts(disk)
30rowsprocessed

SQL>altersessionsetoptimizer_index_cost_adj=1000;

会话已变动。

SQL>ed
已写进fileafiedt.buf

1select*fromt1,t2
2wheret1.id=t2.id
3*andt2.idbetween50and55
SQL>/

已选择30行。


实行企图
----------------------------------------------------------
0SELECTSTATEMENTOptimizer=CHOOSE(Cost=66Card=5Bytes=1000
)

10HASHJOIN(Cost=66Card=5Bytes=1000)
21TABLEACCESS(FULL)OFT2(TABLE)(Cost=13Card=5Byte
s=500)

31TABLEACCESS(FULL)OFT1(TABLE)(Cost=52Card=26Byt
es=2600)





统计信息
----------------------------------------------------------
1recursivecalls
0dbblockgets
271consistentgets
213physicalreads&nbsp解决方案提供商开始推动DBaaS浪潮之前,他们应该深入了解究竟什么是DBaaS。
只想知道 该用户已被删除
沙发
发表于 2015-1-19 21:11:08 | 只看该作者
很多书籍啊,不过个人认为看书太慢,还不如自己学。多做实际的东西,就会遇到很多问题,网上搜下解决问题。不断重复这个过程,在配合sql的F1功能。
爱飞 该用户已被删除
板凳
发表于 2015-1-27 06:10:55 | 只看该作者
原来公司用过MYSQL自己也只是建个表写个SQL
再现理想 该用户已被删除
地板
发表于 2015-2-5 02:43:44 | 只看该作者
对一张百万级别的表建游标,同时又没有什么过滤条件,取得游标效率是如果直接SQL查询百万条数据;如果再对每条记录做处理,耗时将更长。
第二个灵魂 该用户已被删除
5#
发表于 2015-2-11 03:01:17 | 只看该作者
现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层.
乐观 该用户已被删除
6#
发表于 2015-3-1 20:11:20 | 只看该作者
财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的..
老尸 该用户已被删除
7#
发表于 2015-3-10 23:03:12 | 只看该作者
我是新手,正在学习数据库和操作系统,深感理论的泛广,唯有一步一步来,但是又感觉时间不够,收集了很多资料却总是没能认真的看完,希望有一个讨论板块,大家共同解决,共同分享,共同努力
若天明 该用户已被删除
8#
发表于 2015-3-17 15:52:08 | 只看该作者
习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。
山那边是海 该用户已被删除
9#
发表于 2015-3-24 10:19:10 | 只看该作者
XML字段类型更好的解决了XML数据的操作。XQuery确实不错,但是个人对其没好感。(CSDN的开发者应该是相当的熟了!)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 20:33

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表