MYSQL网页设计Oracle 10g(10.1.0.2)中的OPTIMIZER_IN...
客户还是可以使用DBaaS系统所能提供的所有能力。数据库云服务消除了组织对专职人员、本地数据库存储设备的需要。他们不必安装、配置和维护任何软硬件。oracleOracle10g(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 解决方案提供商开始推动DBaaS浪潮之前,他们应该深入了解究竟什么是DBaaS。 很多书籍啊,不过个人认为看书太慢,还不如自己学。多做实际的东西,就会遇到很多问题,网上搜下解决问题。不断重复这个过程,在配合sql的F1功能。 原来公司用过MYSQL自己也只是建个表写个SQL 对一张百万级别的表建游标,同时又没有什么过滤条件,取得游标效率是如果直接SQL查询百万条数据;如果再对每条记录做处理,耗时将更长。 现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层. 财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的.. 我是新手,正在学习数据库和操作系统,深感理论的泛广,唯有一步一步来,但是又感觉时间不够,收集了很多资料却总是没能认真的看完,希望有一个讨论板块,大家共同解决,共同分享,共同努力 习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。 XML字段类型更好的解决了XML数据的操作。XQuery确实不错,但是个人对其没好感。(CSDN的开发者应该是相当的熟了!)
页:
[1]