精灵巫婆 发表于 2015-1-16 22:25:10

MSSQL网站制作之对参数 optimizer_index_cost_adj 的一...

因此我们的保存数据方法就是:在删除的动作开始之前,把表数据备份起来,然后留一个空表,在空表上执行“删除”操作。
参数optimizer_index_cost_adj设定了经由过程索引扫描和全表扫描之间的价值损耗干系,其默许值为100,暗示ORACLE在盘算查询本钱时,经由过程索引查找和全表扫描本钱相称。该参数值越小,标明经由过程索引查找的价值越小,反之则越年夜。

经由过程以下实验,演示该参数的用法。

1)检察参数optimizer_index_cost_adj确当前值


SQL>conn/assysdba









Connected.











SQL>showparameteroptimizer_index_cost_adj



















NAMETYPEVALUE

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

optimizer_index_cost_adjinteger100

--参数以后的默许值为100



SQL>













SQL>selectisses_modifiable,issys_modifiable



2fromv$parameter









3wherename=optimizer_index_cost_adj;



















ISSESISSYS_MOD











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











TRUEFALSE

--申明该参数能够在SESSION级别静态改动,

但不克不及在SYSTEM级别静态改动











2)创立表及索引,并对表举行剖析

SQL>connscott/tiger







Connected.









SQL>createtabletest(anumber,bchar(10));















Tablecreated.





















SQL>











SQL>begin









2foriin1..10000loop





3insertintotestvalues(i,to_char(i));

4endloop;









5commit;









6end;









7/























PL/SQLproceduresuccessfullycompleted.















SQL>











SQL>createindexidx_test_aontest(a);















Indexcreated.





















SQL>











SQL>analyzetabletestcomputestatistics



2fortable









3forallindexes







4forallindexedcolumns;

















Tableanalyzed.





















SQL>












3)将参数optimizer_index_cost_adj设为100,检察响应的实行企图

SQL>setautotracetraceonlyexplain







SQL>altersessionsetoptimizer_index_cost_adj=100;





Sessionaltered.





























SQL>select*fromtestwherea=1;









ExecutionPlan













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



0SELECTSTATEMENTOptimizer=CHOOSE(Cost=2Card=1Bytes=15)

10TABLEACCESS(BYINDEXROWID)OFTEST(Cost=2Card=1Byt

es=15)





























21INDEX(RANGESCAN)OFIDX_TEST_A(NON-UNIQUE)(Cost=1

Card=1)














在以上部分中,ORACLE接纳了准确的查找办法,利用索引来查找数据。
上面演示怎样让ORACLE接纳全表扫描的体例来查找数据,固然我们明知这类体例效力不高。

4)改动参数optimizer_index_cost_adj为1000,改动ORACLE的决议历程

SQL>altersessionsetoptimizer_index_cost_adj=1000;





















Sessionaltered.





























SQL>select*fromtestwherea=1;

























ExecutionPlan













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



0SELECTSTATEMENTOptimizer=CHOOSE(Cost=4Card=1Bytes=15)

10TABLEACCESS(FULL)OFTEST(Cost=4Card=1Bytes=15)

在以演出示中,经由过程改动optimizer_index_cost_adj参数,ORACLE接纳全表扫描来实行一样的查询。

5)总结
在OLTP体系中,能够思索将optimizer_index_cost_adj参数值设小,使体系偏向于利用索引;在DSS体系中,则能够思索得当将该参数调年夜,影响ORACLE的决议历程。

对于update操作,event中依次记录旧行,新行的值。

乐观 发表于 2015-1-18 09:56:46

习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。

简单生活 发表于 2015-1-21 18:35:55

每天坚持做不一样的是,认真做笔录,定时复习。一个月你就可以有一定的收获。当然如果你想在sql方面有一定的造诣,你少不了需要看很多很多的书籍了。

小女巫 发表于 2015-1-30 21:46:05

这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。

冷月葬花魂 发表于 2015-2-6 16:09:05

个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。

活着的死人 发表于 2015-2-17 02:58:51

SQL语言是学习所有数据库产品的基础,无论你是做数据库管理还是做数据库开发都是这样。不过具体学习的侧重点要看你将来做哪一块,如果是做数据库管理(DBA),侧重点应该放在SQLServer的系统管理上.

海妖 发表于 2015-3-5 15:00:22

至于淘汰的问题,只能说在你的项目周期之内,微软应该都不会倒闭。

深爱那片海 发表于 2015-3-12 08:52:22

原来公司用过MYSQL自己也只是建个表写个SQL

第二个灵魂 发表于 2015-3-19 19:31:16

始终遗憾SQLServer的登陆无法分配CPU/内存占用等指标数。如果你的SQLServer给别人分配了一个只可以读几个表的权限,而这个家伙疯狂的死循环进行连接查询,会给你的系统带来很大的负担。
页: [1]
查看完整版本: MSSQL网站制作之对参数 optimizer_index_cost_adj 的一...