`
huihui_0218
  • 浏览: 26903 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

SEQUENCE — cache 的用处

阅读更多
在创建序列的语法中,有一个子句为 cache,它的用处是缓存指定个数的序列值。比如你设置的 cache 是20,那么在获取 nextval 时,Oracle 会直接从 cache 中取下一个序列值,如果 cache 中缓存的序列值没有了(比如 cache 中的序列值用完了,或者被手工清空了),那么 Oracle 会再次产生20个序列值,并放置 cache 中供使用,这样有助于提高序列值的获取速度。

-------------------------------
下面为测试:

01.SQL> select * from v$version; 
02.  
03.BANNER 
04.---------------------------------------------------------------- 
05.Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod 
06.PL/SQL Release 10.2.0.1.0 - Production 
07.CORE    10.2.0.1.0      Production 
08.TNS for 32-bit Windows: Version 10.2.0.1.0 - Production 
09.NLSRTL Version 10.2.0.1.0 - Production 
10.  
11.SQL> create sequence SEQ_TEST1 
12.  2  minvalue 1 
13.  3  maxvalue 1000 
14.  4  start with 1 
15.  5  increment by 1 
16.  6  cache 20 
17.  7  order; 
18.  
19.序列已创建。 
20.  
21./*这里需要注意的是用dual得到的是一个值,但是用USER_SEQUENCES得到的是cache里的缓存的序列集合*/ 
22.-- //刚刚创建的序列必须先用 nextval 来获取一个初始值  
23.SQL> select SEQ_TEST1.currval from dual; 
24.select SEQ_TEST1.currval from dual 
25.       * 
26.ERROR 位于第 1 行: 
27.ORA-08002: 序列 SEQ_TEST1.CURRVAL 尚未在此会话中定义 
28.  
29. 
30.SQL> select SEQ_TEST1.nextval from dual; 
31.  
32.   NEXTVAL 
33.---------- 
34.         1 
35.  
36.SQL> select SEQ_TEST1.currval from dual; 
37.  
38.   CURRVAL 
39.---------- 
40.         1 
41.  
42.-- //清空 cache 中缓存的序列值  
43.SQL> alter system flush shared_pool; 
44.  
45.系统已更改。 
46.  
47.-- //查询当前值,没有变化,仍是1  
48.SQL> select SEQ_TEST1.currval from dual; 
49.  
50.   CURRVAL 
51.---------- 
52.         1 
53.  
54.-- //查询下一个值:Oracle 发现 cache 中的序列值没有了,会再次产生20个序列值供使用。  
55.-- //所以这里得到的结果不是2,而是21。  
56.SQL> select SEQ_TEST1.nextval from dual; 
57.  
58.   NEXTVAL 
59.---------- 
60.        21 
61.  
62.-- 再试一次 
63.SQL> alter system flush shared_pool; 
64.  
65.系统已更改。 
66.  
67.SQL> select SEQ_TEST1.currval from dual; 
68.  
69.   CURRVAL 
70.---------- 
71.        21 
72.  
73.SQL> select SEQ_TEST1.nextval from dual; 
74.  
75.   NEXTVAL 
76.---------- 
77.        41 
78.  
79.-- //问题:Oracle 下一次取的20个值是从哪里开始计算的呢,是 currval + 20,  
80.-- //还是每个 cache + 20 呢?我们试验一下。  
81.SQL> select SEQ_TEST1.nextval from dual; 
82.  
83.   NEXTVAL 
84.---------- 
85.        42 
86.  
87.-- //现在序列的当前值是42。如果是用 currval + 20 来计算,那么清空 cache 后,  
88.-- //获得的 nextval 应该是62;如果是 cache + 20,那应该是 61。  
89.-- //看看实验结果吧:  
90.SQL> alter system flush shared_pool; 
91.  
92.系统已更改。 
93.  
94.SQL> select SEQ_TEST1.currval from dual; 
95.  
96.   CURRVAL 
97.---------- 
98.        42 
99.  
100.SQL> select SEQ_TEST1.nextval from dual; 
101.  
102.   NEXTVAL 
103.---------- 
104.        61 
分享到:
评论

相关推荐

    oracle中sequence介绍及应用

    ### Oracle中的Sequence...通过以上步骤,我们可以看到Sequence在Oracle数据库中的强大功能和广泛用途,不仅能够方便地实现主键自增,还能灵活生成各种类型的序列号。这对于日常的数据处理工作来说是非常实用的工具。

    oracle 主键自增 sequence

    #### 一、Sequence 的概念及用途 在 Oracle 数据库中,`Sequence` 是一种用于生成一系列唯一数值的对象。这些数值可以按照特定的规则递增或递减,并且可以设定是否循环以及是否缓存等特性。`Sequence` 常用于自动...

    数据库表dual

    Dual表的主要用途是: 1. 查看当前用户:可以在 SQL Plus 中执行以下语句来查看当前用户: ``` select user from dual; ``` 2. 调用系统函数:可以使用Dual表来调用系统函数,例如: ``` select to_char(sysdate, '...

    ORACLE BASIC KNOWLDGE

    主要用途在于提供模式独立性,即用户可以通过同义词访问其他模式下的表,而无需指定完整的模式名。 ##### 使用场景 - **模式独立性**:简化对其他模式下表的引用。 - **安全性**:可以用于隐藏实际表的位置。 ####...

    老二牛车第四章理论课数据库对象.pdf

    - **语法**:`CREATE SEQUENCE sequence_name [INCREMENT BY increment] [MINVALUE minvalue] [MAXVALUE maxvalue] [START WITH start] [CACHE cache_size | NOCACHE];` - **示例**:`CREATE SEQUENCE seq_emp ...

    8 数据库对象&表空间.ppt

    数据库对象包括各种类型,如表、同义词、序列、视图、索引等,它们都有特定的功能和用途。 1. **表**:表是最基本的数据库对象,用于存储数据。它由列和行组成,列定义了数据类型和约束,行则包含实际的数据。 2. ...

    视图、同义词和序列

    CYCLE/CACHE cache_size NOCACHE; ``` 序列对于自动化数据插入非常有用,特别是在大数据量和多用户的环境下。 视图的限制包括不能选取`Currval`和`Nextval`伪列,以及在某些特定查询结构中不能执行DML操作,例如...

    CACTI DATABASE SCHEMMA

    - **sequence**:该字段未在示例中出现,推测可能用于记录CDEF表达式中各项的顺序。 **用途**:存储CDEF表达式中的具体项信息,每个项都与一个CDEF表达式关联,用以实现数据处理逻辑。 --- 接下来是其他重要表的...

    bios中英文对照表

    **Level 2 Cache 二级缓存** - **中文含义**:CPU的第二级缓存。 - **用途**:提高处理器性能,减少访问主内存所需时间。 ##### 4. **System Memory 系统内存** - **中文含义**:安装在计算机上的RAM总量。 ...

    Oracle SQL笔记.pdf

    - **创建序列**:`CREATE SEQUENCE sequence_name START WITH start_value INCREMENT BY increment_value MAXVALUE max_value MINVALUE min_value CYCLE|NOCYCLE CACHE cache_size NOCACHE;` - **查看序列**:`...

    BIOS中英文对照表

    Level2Cache 二级缓存 - **定义**: CPU中的第二层高速缓存,用于暂时存储频繁访问的数据,以提高处理速度。 - **用途**: 调整二级缓存的大小可以优化CPU性能,特别是在多任务处理和大型数据集处理方面。 #### 4. ...

    plsql编号序列号

    1. 序列的概念与用途 序列是一种数据库对象,它能生成唯一的、有序的整数值。在Oracle中,序列可以是连续的或者有间隔的,可以递增或递减,并且可以在不进行任何插入操作的情况下预生成值。序列主要用于自动生成表中...

    oracle

    CACHE 20 CYCLE ORDER; ``` 3. **创建触发器** 使用`BEFORE INSERT`触发器,在插入新记录前自动填充`TID`字段。 ```sql CREATE OR REPLACE TRIGGER scott.trg_test BEFORE INSERT ON scott.test_table ...

    oracle官方文档概念第四章

    **序列的用途** 序列是Oracle数据库中用来生成连续整数的一种对象。通常用于自动生成主键或唯一标识符。 **创建序列** 创建序列的基本语法如下: ```sql CREATE SEQUENCE sequence_name INCREMENT BY increment_...

    对口升学考试计算机基础课模拟试题.pdf

    此外,题目中还包括一些判断题和名词解释题,涉及USB设备的热插拔特性、IDE接口的用途、AGP接口的定义、CPU微制造工艺、计算机性能评估、购买电脑的注意事项、元件接口清洁、内存条操作、显卡核心部件、驱动程序的...

    freemarker总结

    上面的语法格式中,sequence就是一个集合对象,也可以是一个表达式,但该表达式将返回一个集合对象,而item是一个任意的名字,就是被迭代输出的集合元素.此外,迭代集合对象时,还包含两个特殊的循环变量: item_index:...

    Python编程规范1

    9. **名称的选择** 应该清晰地反映其用途,避免使用保留词、简写或非标准缩写,例如`nums_layers`、`nums_channels`。 ### 注释标准 1. **行尾注释** 如`EXPIRE = 3600 # 空格调用方指定的时间数值`,保持简洁明了...

    深入解读PostgreSQL中的序列及其相关函数的用法

    序列的主要用途在于为表提供一个默认的唯一标识符。在PostgreSQL中,序列通过CREATE SEQUENCE语句创建。该语句允许用户自定义序列的起始值、增量、最小值、最大值以及是否循环等特性。例如,我们可以创建一个从1开始...

    数据库建表语句.txt

    在本例中,通过`CREATE SEQUENCE HARD_SEQ`创建了一个名为`HARD_SEQ`的序列。具体参数说明如下: - `MINVALUE`: 序列最小值,默认为1。 - `MAXVALUE`: 序列最大值,默认无限制。在此示例中设置为极大值。 - `START ...

Global site tag (gtag.js) - Google Analytics