仓酷云

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

[学习教程] MSSQL教程之从不sequential的sequence

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

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

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

x
支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
碰到过很多多少成绩关于怎样在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:29 | 只看该作者
再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SETNULL和SETDEFAULT属性,能够提供能好的级联设置。
柔情似水 该用户已被删除
板凳
发表于 2015-1-19 13:52:29 | 只看该作者
我们学到了什么?思考问题的时候从表的角度来思考问
老尸 该用户已被删除
地板
发表于 2015-1-25 12:10:02 | 只看该作者
是否碎片会引发效率问题?这都是需要进一步探讨的东西。varbinary(max)代替image也让SQLServer的字段类型更加简洁统一。
简单生活 该用户已被删除
5#
发表于 2015-2-2 22:02:52 | 只看该作者
微软对CLR作了大篇幅的宣传,这是因为数据库产品终于融入.net体系中。最开始我们也是狂喜,感觉对象数据库的一些概念可以实现了。
深爱那片海 该用户已被删除
6#
发表于 2015-2-8 09:28:14 | 只看该作者
对一张百万级别的表建游标,同时又没有什么过滤条件,取得游标效率是如果直接SQL查询百万条数据;如果再对每条记录做处理,耗时将更长。
透明 该用户已被删除
7#
发表于 2015-2-25 08:51:06 | 只看该作者
个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。
若相依 该用户已被删除
8#
 楼主| 发表于 2015-3-7 18:28:51 | 只看该作者
对一张百万级别的表建游标,同时又没有什么过滤条件,取得游标效率是如果直接SQL查询百万条数据;如果再对每条记录做处理,耗时将更长。
爱飞 该用户已被删除
9#
发表于 2015-3-15 11:28:52 | 只看该作者
这是一个不错的新特性。虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。我做过试验,在我的实验环境中会比映射到表中提高30%左右的效率。
山那边是海 该用户已被删除
10#
发表于 2015-3-22 00:30:47 | 只看该作者
语句级快照和事务级快照终于为SQLServer的并发性能带来了突破。个人感觉语句级快照大家应该应用。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被提示修改不成功要求重试时,会杀人的!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-3-12 04:41

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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