達夢6.0試用之資料庫物件
前幾天ITPUB的熊建國主編和我聯絡,希望我能參加國產資料庫達夢的適用活動,並寫幾篇使用感受。本來最近手工的事情比較多,本打算推辭的,不過熊主編再三邀請,而且強調並非是槍手文,只要寫出真實使用感受即可。既然如此,我就本著支援國產資料庫的原則,寫幾篇試用感受。
由於本人唯一熟悉的資料庫就是Oracle,因此所有的對比都是與Oracle資料庫進行對比,在這個過程中,將盡可能避免將對Oracle資料庫的喜愛之情帶進來,爭取站在一個比較公正的位置上來進行評價。
這一篇簡單介紹達夢資料庫提供的各種資料庫物件。
資料庫物件型別比較多,只能從最簡單的層面進行概述:
SQL>CREATE TABLE T_TAB (ID NUMBER, NAME VARCHAR);
CREATE TABLE T_TAB (ID NUMBER, NAME VARCHAR);
time used: 145.832(ms) clock tick:243819170.
SQL>CREATE INDEX IND_T_TAB
2 ON T_TAB (ID);
CREATE INDEX IND_T_TAB
ON T_TAB (ID);
time used: 63.429(ms) clock tick:106042860.
SQL>CREATE INDEX IND_T_TAB2
2 ON T_TAB(ID);
CREATE INDEX IND_T_TAB2
ON T_TAB(ID);
time used: 74.793(ms) clock tick:125041410.
資料庫中處理最常見的表之外,就是索引了,顯然和Oracle資料庫中不一樣,同一個欄位上可以重複索引多次。
除了常規的索引外,還可以建立唯一索引和BITMAP索引:
SQL>CREATE UNIQUE INDEX IND_T_ID ON T(ID);
CREATE UNIQUE INDEX IND_T_ID ON T(ID);
time used: 48.352(ms) clock tick:80826160.
SQL>CREATE BITMAP INDEX IND_T_DATE
2 ON T(CREATE_DATE);
CREATE BITMAP INDEX IND_T_DATE
ON T(CREATE_DATE);
time used: 1.051(ms) clock tick:1554330.
達夢資料庫還支援CLUSTER索引:
SQL>CREATE CLUSTER INDEX IND_T_C_NAME
2 ON T(NAME);
CREATE CLUSTER INDEX IND_T_C_NAME
ON T(NAME);
time used: 1573.010(ms) clock tick:1245465460.
建立CLUSTER索引的時間要明顯長於普通索引,而且這裡的CLUSTER和Oracle中的CLUSTER以及CLUSTER INDEX並不相同,這裡的CLUSTER索引類似SQLSERVER中的CLUSTER索引。
函式索引也是支援的:
SQL>CREATE INDEX IND_UPP_NAME
2 ON T(UPPER(NAME));
CREATE INDEX IND_UPP_NAME
ON T(UPPER(NAME));
time used: 46.564(ms) clock tick:77264470.
甚至連全文索引都是支援的:
SQL>CREATE TABLE T_LOB
2 (ID NUMBER,
3 CONTENTS CLOB);
CREATE TABLE T_LOB
(ID NUMBER,
CONTENTS CLOB);
time used: 12.018(ms) clock tick:19830720.
SQL>INSERT INTO T_LOB
2 VALUES (1, '使用者可以在指定的表的文字列上建立全文索引');
INSERT INTO T_LOB
VALUES (1, '使用者可以在指定的表的文字列上建立全文索引')
1 rows affected
time used: 0.390(ms) clock tick:639420.
SQL>CREATE CONTEXT INDEX T_CONTEXT_LOB
2 ON T_LOB(CONTENTS);
CREATE CONTEXT INDEX T_CONTEXT_LOB
ON T_LOB(CONTENTS);
time used: 553.896(ms) clock tick:633347730.
SQL>SELECT * FROM T_LOB
2 WHERE CONTAINS(CONTENTS, '索引');
SELECT * FROM T_LOB
WHERE CONTAINS(CONTENTS, '索引');
全文索引 'T_CONTEXT_LOB' 無效,需要重新填充.error code = -1453
SQL>ALTER CONTEXT INDEX T_CONTEXT_LOB ON T_LOB REBUILD;
ALTER CONTEXT INDEX T_CONTEXT_LOB ON T_LOB REBUILD
time used: 1087.051(ms) clock tick:1746940440.
SQL>SELECT * FROM T_LOB
2 WHERE CONTAINS(CONTENTS, '索引');
SELECT * FROM T_LOB
WHERE CONTAINS(CONTENTS, '索引');
ID CONTENTS
1 1 使用者可以在指定的表的文字列上建立全文索引
1 rows got
time used: 0.734(ms) clock tick:1213930.
SQL>SELECT * FROM T_LOB
2 WHERE CONTAINS(CONTENTS, '索引' AND '文字');
SELECT * FROM T_LOB
WHERE CONTAINS(CONTENTS, '索引' AND '文字');
ID CONTENTS
1 1 使用者可以在指定的表的文字列上建立全文索引
1 rows got
time used: 1.117(ms) clock tick:1853100.
全文索引的語法和Oracle的相似,但是有不少的區別,比如全文索引比較要先填充才能使用,比如CONTAINS操作返回的是布林型別而不是數值。由於這部分包含的內容比較多,這裡就不深入了,不過達夢顯然是支援全文索引功能的,而且也是支援中文切詞的。
達夢資料庫支援檢視物件:
SQL>CREATE VIEW V_TEST
2 AS SELECT * FROM T;
CREATE VIEW V_TEST
AS SELECT * FROM T;
time used: 32.179(ms) clock tick:53413690.
SQL>SELECT * FROM V_TEST;
SELECT * FROM V_TEST;
id name create_date
1 1 A NULL
2 2 B 2010-04-07
3 3 ABC NULL
3 rows got
time used: 0.524(ms) clock tick:860730.
SQL>UPDATE V_TEST
2 SET NAME = LOWER(NAME);
UPDATE V_TEST
SET NAME = LOWER(NAME);
3 rows affected
time used: 28.230(ms) clock tick:47182590.
SQL>SELECT * FROM V_TEST;
SELECT * FROM V_TEST;
id name create_date
1 1 a NULL
2 2 b 2010-04-07
3 3 abc NULL
3 rows got
time used: 0.292(ms) clock tick:473380.
而且檢視也是可以更新的。
下面看看同義詞物件:
SQL>CREATE SYNONYM S_T FOR T;
CREATE SYNONYM S_T FOR T;
time used: 38.520(ms) clock tick:64245130.
SQL>SELECT * FROM S_T;
SELECT * FROM S_T;
id name create_date
1 1 a NULL
2 2 b 2010-04-07
3 3 abc NULL
3 rows got
time used: 0.528(ms) clock tick:865700.
SQL>CREATE PUBLIC SYNONYM S_1 FOR T;
CREATE PUBLIC SYNONYM S_1 FOR T;
time used: 31.936(ms) clock tick:53378050.
SQL>CREATE SYNONYM S_TEST FOR F_TAX;
CREATE SYNONYM S_TEST FOR F_TAX;
time used: 11.845(ms) clock tick:19788480.
SQL>SELECT S_TEST(5000) FROM T;
SELECT S_TEST(5000) FROM T;
1 325
2 325
3 325
3 rows got
time used: 0.495(ms) clock tick:815300.
可以建立普通同義詞、PUBLIC同義詞。可以建立指向表的同義詞,也可以建立函式的同義詞。這部分和Oracle中沒有什麼區別。
看看序列部分:
SQL>CREATE SEQUENCE S_1
2 INCREMENT BY 3
3 START WITH 5;
CREATE SEQUENCE S_1
INCREMENT BY 3
START WITH 5;
time used: 63.185(ms) clock tick:105098660.
SQL>SELECT S_1.NEXTVAL FROM T;
SELECT S_1.NEXTVAL FROM T;
NEXTVAL
1 5
2 8
3 11
3 rows got
time used: 0.947(ms) clock tick:1567590.
序列也與Oracle提供的很相似,前面提到了,達夢實現了自增列,而現在又實現了類似功能的序列,主要應該是出於相容性的考慮。
在前面已經提到了,達夢資料庫是支援過程、函式、包和觸發器的,但是達夢資料庫不支援物件。
達夢還支援快照。不過這個SNAPSHOT和Oracle中的SNAPSHOT也就是物化檢視大相徑庭,達夢中的SNAPSHOT是資料庫的快照,建立的實際上就是指定資料庫在建立時間點的只讀映象,這實際上已經不是物件的概念了,這裡就不再描述了。
總的來說,Oracle絕大部分的物件在達夢資料庫中都是支援的,而且大部分物件的用法和功能都沒有發生變化,這使得遷移在物件層面上變得可行。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-668544/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 達夢6.0試用之資料字典
- 達夢6.0試用之資料型別資料型別
- 達夢6.0試用之PLSQL篇SQL
- 達夢6.0試用之SQL篇SQL
- 達夢6.0試用之架構篇架構
- 達夢6.0試用之測試環境搭建
- 達夢6.0試用之併發和鎖機制
- 達夢資料庫之初步測試資料庫
- 達夢資料庫開發資料庫
- 初識達夢資料庫資料庫
- 達夢資料庫學習資料庫
- 達夢資料庫安裝資料庫
- 【達夢】Docker安裝達夢資料庫 dm8Docker資料庫
- 達夢6.0 for Windows安裝Windows
- 達夢資料庫基礎知識(三)達夢資料庫記憶體結構資料庫記憶體
- 達夢遷移工具之MySQL資料庫遷移到達夢MySql資料庫
- 達夢資料庫基礎---表資料庫
- 達夢資料庫日常運維資料庫運維
- 達夢資料庫學習心得資料庫
- 資料庫國產化實戰之達夢資料庫資料庫
- DataX將Oracle資料庫資料同步到達夢資料庫Oracle資料庫
- 達夢7資料庫初始化資料庫
- 達夢資料庫備份恢復資料庫
- 達夢資料庫DCP培訓心得資料庫
- 達夢資料庫學習筆記資料庫筆記
- 達夢資料庫DM8共享叢集測試記錄資料庫
- DBeave如何連線達夢資料庫,設定達夢驅動,真酷資料庫
- 達夢資料庫圖形化作業管理資料庫
- 達夢資料庫統計資訊詳解資料庫
- 達夢資料庫引數調整方法資料庫
- 達夢透明分散式資料庫介紹分散式資料庫
- 達夢資料庫全文索引簡介資料庫索引
- 達夢8資料庫的狀態模式資料庫模式
- 達夢資料庫索引結構詳解資料庫索引
- 達夢資料庫odbc的安裝教程資料庫
- 配置達夢資料庫同構DBLINK資料庫
- CYQ.Data 支援 DaMeng 達夢資料庫資料庫
- Centos-8.2-安裝達夢資料庫CentOS資料庫