仓酷云
标题:
MSSQL教程之从不sequential的sequence
[打印本页]
作者:
若相依
时间:
2015-1-16 22:28
标题:
MSSQL教程之从不sequential的sequence
支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
碰到过很多多少成绩关于怎样在ORACLE中创立相似SQLSERVER或ACCESS中自增加字段。谜底多是先创建一个Sequence,然后在Trigger中将Sequence的NEXTVAL的取值付与所必要的列。看上往还不错。
可是统统真的那末顺遂吗?Sequence真的能够做到供应一序列一连没有漏掉的序列数值吗?
无妨作个实行:
SQL>createsequencetest_seqstartwith1;
Sequencecreated.
SQL>createtabletest_tab(xint);
Tablecreated.
SQL>insertintotest_tabvalues(test_seq.nextval);
1rowcreated.
SQL>insertintotest_tabvalues(test_seq.nextval);
1rowcreated.
SQL>insertintotest_tabvalues(test_seq.nextval);
1rowcreated.
SQL>commit;
Commitcomplete.
SQL>select*fromtest_tab;
X
----------
1
2
3
SQL>conn/assysdba;
Connected.
SQL>altersystemflushshared_pool;
Systemaltered.
SQL>connuser1/user1
Connected.
SQL>insertintotest_tabvalues(test_seq.nextval);
1rowcreated.
SQL>commit;
Commitcomplete.
SQL>select*fromtest_tab;
X
----------
1
2
3
21
从实验中能够看出,在缺省情形下,我们创建的是带有Cache选项的Sequence(缺省值是20),它的感化是事后将必定数目的序列值寄存在SGA中,便于疾速会见。但是它的反作用就是这部分数值大概会被扫除,当下一次猎取NEXTVAL时,就会不成制止地形成序列值丧失。
总结一下,在以下情形下,序列值会丧失:
1.数据库封闭或重起,因为全部SGA会被扫除,以是Cached的序列值一样会被扫除。
2.相似于一般的DataBlock,当SGA中必要安排新的数据,Cached的序列值大概会依照SGA的数据寄存划定规矩被扫除。
读到这里,仔细的读者大概会问,假如在创立Sequence时,成心不选用Cache选项,成绩不就办理了吗?且慢,另有两点必要注重:
1.会见效力下降,没有Cache功效的Sequence取值将没法间接会见内存
2.不管是Nocache仍是Cache,每次会见NEXTVAL的历程都是不成逆的,在统一session中,在实行一系列DML和Sequence的操纵后,用户实行Rollback,但愿将操纵回滚,可是Sequence此时就显得非常固执,用失落的NEXTVAL将没法被重现。当下一次试图读取NEXTVAL时,Sequence的指针又挪动到下一名了。
看来Oracle真是一个陆地,每一个微小的常识点都是那末饶风趣味,值得我们往勉力专研啊。
备注:利用Cache功效对Sequence读取效力的影响
Connectedto:
Oracle8iEnterpriseEditionRelease8.1.7.4.1-Production
WiththePartitioningoption
JServerRelease8.1.7.4.1-Production
SQL>settimingon
SQL>setautotracetraceonlystatistics
SQL>SELECT*FROMALL_OBJECTS;
14302rowsselected.
Elapsed:00:00:13.05
Statistics
----------------------------------------------------------
7recursivecalls
4dbblockgets
146635consistentgets
0physicalreads
0redosize
1633344bytessentviaSQL*Nettoclient
117520bytesreceivedviaSQL*Netfromclient
956SQL*Netroundtripsto/fromclient
0sorts(memory)
0sorts(disk)
14302rowsprocessed
SQL>
SQL>--测试带有CACHE选项的Sequence:
SQL>
SQL>CREATESEQUENCEtest_seq1CACHE1000;
Sequencecreated.
Elapsed:00:00:00.00
SQL>SELECTx.*,test_seq1.NEXTVALFROMALL_OBJECTSx;
14303rowsselected.
Elapsed:00:00:13.09
Statistics
----------------------------------------------------------
202recursivecalls
64dbblockgets
146636consistentgets
0physicalreads
10468redosize
1752002bytessentviaSQL*Nettoclient
117543bytesreceivedviaSQL*Netfromclient
956SQL*Netroundtripsto/fromclient
0sorts(memory)
0sorts(disk)
14303rowsprocessed
SQL>
SQL>--测试不带有CACHE选项的Sequence
SQL>
SQL>DROPSEQUENCEtest_seq1;
Sequencedropped.
Elapsed:00:00:00.00
SQL>CREATESEQUENCEtest_seq1NOCACHE;
Sequencecreated.
Elapsed:00:00:00.00
SQL>SELECTx.*,test_seq1.NEXTVALFROMALL_OBJECTSx;
14303rowsselected.
Elapsed:00:00:32.02(实行工夫分明长了)
Statistics
----------------------------------------------------------
185946recursivecalls
57216dbblockgets
160925consistentgets
0physicalreads
10004008redosize
1752002bytessentviaSQL*Nettoclient
117543bytesreceivedviaSQL*Netfromclient
956SQL*Netroundtripsto/fromclient
0sorts(memory)
0sorts(disk)
14303rowsprocessed
BLACK_SNAIL
接待交换,转载说明
ligang1000@hotmail.com/ligang@fujitsu.sh.cn
刚安装好的MySql包含一个含空密码的root帐户和一个匿名帐户,这是很大的安全隐患,对于一些重要的应用我们应将安全性尽可能提高,在这里应把匿名帐户删除、root帐户设置密码
作者:
谁可相欹
时间:
2015-1-19 13:52
再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SETNULL和SETDEFAULT属性,能够提供能好的级联设置。
作者:
柔情似水
时间:
2015-1-19 13:52
我们学到了什么?思考问题的时候从表的角度来思考问
作者:
老尸
时间:
2015-1-25 12:10
是否碎片会引发效率问题?这都是需要进一步探讨的东西。varbinary(max)代替image也让SQLServer的字段类型更加简洁统一。
作者:
简单生活
时间:
2015-2-2 22:02
微软对CLR作了大篇幅的宣传,这是因为数据库产品终于融入.net体系中。最开始我们也是狂喜,感觉对象数据库的一些概念可以实现了。
作者:
深爱那片海
时间:
2015-2-8 09:28
对一张百万级别的表建游标,同时又没有什么过滤条件,取得游标效率是如果直接SQL查询百万条数据;如果再对每条记录做处理,耗时将更长。
作者:
透明
时间:
2015-2-25 08:51
个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。
作者:
若相依
时间:
2015-3-7 18:28
对一张百万级别的表建游标,同时又没有什么过滤条件,取得游标效率是如果直接SQL查询百万条数据;如果再对每条记录做处理,耗时将更长。
作者:
爱飞
时间:
2015-3-15 11:28
这是一个不错的新特性。虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。我做过试验,在我的实验环境中会比映射到表中提高30%左右的效率。
作者:
山那边是海
时间:
2015-3-22 00:30
语句级快照和事务级快照终于为SQLServer的并发性能带来了突破。个人感觉语句级快照大家应该应用。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被提示修改不成功要求重试时,会杀人的!
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2