国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

學會將SYS_GUID和序列作為主關鍵字

2024-07-21 02:34:42
字體:
來源:轉載
供稿:網友

  Oracle8i引入了SYS_GUID這個概念,它同Oracle治理員所使用的傳統的序列(sequence)相比具有諸多優勢。一個序列生成器只是簡單地創建從給定的起點開始的一系列整數值,而且它被用在選擇陳述式的時候自動地遞增該系列。
  
  序列生成器所生成的數字只能保證在單個實例里是唯一的,這就不適合將它用作并行或者遠程環境里的主要害字,因為各自環境里的序列可能會生成相同的數字,從而導致沖突的發生。SYS_GUID會保證它創建的標識符在每個數據庫里都是唯一的。
  
  此外,序列必須是DML陳述式的一部分,因此它需要一個到數據庫的往返過程(否則它就不能保證其值是唯一的)。SYS_GUID源自不需要對數據庫進行訪問的時間戳和機器標識符,這就節省了查詢的消耗。
  
  create table use_seq_table(id integer);
  create sequence use_seq_sequence;
  insert into use_seq_table values (use_seq_sequence_value.nextval);
  
  REM - for some reason, the documentation uses raw(32)
  create table use_guid_table(id raw(16));
  insert into use_guid_table(sys_guid());
  
  很多應用程序都依靠序列生成器來創建數據行的主要害字,這些數據行沒有一個明顯的主值,這也就是說,在這樣的數據集里一條記錄的創建就會讓數據列發生改變。因此,治理員可能會對在表格中將SYS_GUID用作主要害字而不使用序列數感愛好。這在對象在不同機器的不同數據庫里生成以及需要在后來合并到一起的情況下很有用。
  
  但是,SYS_GUID所生成的值是一個16位的原始值。序列所生成的整數不會使用16位(的值),除非它達到了10的30次方(每個字節有兩位),而且數字是相當獨特的:
  
  SQL> select dump(123456789012345678901234567890) from dual;
  
  DUMP(123456789012345678901234567890)
  --------------------------------------------------------------
  Typ=2 Len=16: 207,13,35,57,79,91,13,35,57,79,91,13,35,57,79,91
  
  較短的值就意味著用于表格和索引的存儲空間更少,以及查詢訪問的時間更短。
  
  使用SYS_GUID或者序列會在數據庫使用周期里的某些地方造成性能上的消耗;問題就是在哪里。對于SYS_GUID而言,性能上的影響在查詢時間和創建時間上(在表格里要創建更多的塊和索引以容納數據)。對序列而言,性能上的影響在查詢期間,在這個時候,SGA序列的緩沖區被用光。在缺省情況下,一個序列一次會緩沖20個值。假如數據庫沒有使用這些值就關閉了,它們就會被丟失。
  
  SYS_GUID生成的值的另一個顯著的不足之處是,治理這些值會變得困難得多。你必須(手動)輸入它們或者通過腳本來填充它們,或者將它們作為Web參數來傳遞。
  
  出于這些原因,將SYS_GUID作為一個主要害字不是一個很好主意,除非是在一個并行的環境里或者希望避免使用治理序列生成器的情況下。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武冈市| 芦山县| 邳州市| 东乡族自治县| 托克逊县| 香格里拉县| 秦皇岛市| 云霄县| 凤山县| 彰化市| 新竹市| 山丹县| 报价| 旬阳县| 北宁市| 汉沽区| 廊坊市| 宾川县| 冷水江市| 呼伦贝尔市| 汪清县| 泾源县| 青岛市| 班玛县| 兴宁市| 彭山县| 张北县| 平泉县| 营口市| 景宁| 金秀| 湘潭县| 三穗县| 南江县| 澄城县| 普陀区| 阜新市| 泰兴市| 赫章县| 平罗县| 花莲县|