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中依次记录旧行,新行的值。 习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。 每天坚持做不一样的是,认真做笔录,定时复习。一个月你就可以有一定的收获。当然如果你想在sql方面有一定的造诣,你少不了需要看很多很多的书籍了。 这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。 个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。 SQL语言是学习所有数据库产品的基础,无论你是做数据库管理还是做数据库开发都是这样。不过具体学习的侧重点要看你将来做哪一块,如果是做数据库管理(DBA),侧重点应该放在SQLServer的系统管理上. 至于淘汰的问题,只能说在你的项目周期之内,微软应该都不会倒闭。 原来公司用过MYSQL自己也只是建个表写个SQL 始终遗憾SQLServer的登陆无法分配CPU/内存占用等指标数。如果你的SQLServer给别人分配了一个只可以读几个表的权限,而这个家伙疯狂的死循环进行连接查询,会给你的系统带来很大的负担。
页:
[1]