1. 程式人生 > >DB2學習筆記--資料庫物件

DB2學習筆記--資料庫物件

1.模式
在應用程式中,如果模式沒有被顯示的指定,那麼就會用執行改程式的使用者名稱作為預設模式名。DB2中模式名不一定是使用者名稱,db2內部沒有使用者名稱的概念,連線db2的使用者必須是作業系統使用者。
可用 sysibm.schemata 檢視檢視資料庫建立了那些模式


sysibm模式儲存系統資料字典
syscat模式儲存系統檢視
sysibmadm:是V9引入系統管理檢視模式。
sysstat:統計檢視模式,DB2優化器提供資訊。


2.表
查看錶欄位及型別
[[email protected] ~]$ db2 describe table t1


                                Data type                     Column
Column name                     schema    Data type name      Length     Scale Nulls
------------------------------- --------- ------------------- ---------- ----- ------
ID                              SYSIBM    CHARACTER                    1     0 Yes   
NAME                            SYSIBM    CHARACTER                   10     0 Yes 


檢視當前使用者名稱作為模式名的所有表
db2 list tables
檢視所有模式名的所有表
db2 list tables for all
檢視某模式名下的所有表
db2 list tables for schema schema_name
看錶結構
db2 describe table tabname


3.表約束
約束型別:非空約束、唯一性約束、主鍵約束和外來鍵約束、檢查約束


[
[email protected]
~]$ db2 "create table department(dept char(3) not null ,deptname char(20) not null,constraint dept_name unique(deptname),primary key (dept))"
DB20000I  The SQL command completed successfully.




[[email protected] ~]$ db2 "create table employee(empno char(6) not null,name char(30) , age int,wkdept char(3) not null,constraint dept foreign key (wkdept) references department(dept) on delete cascade,constraint age check(age<200))"
DB20000I  The SQL command completed successfully.


4.表狀態:
對錶結構進行更改時,會導致表處於reorg-pengding 狀態
ALTER TABLE tabname ALTER colname SET DATA TYPE data_type
ALTER TABLE tabname ALTER colname SET NOT NULL
ALTER TABLE tabname DROP COLUMN colname
...




表壓縮
ALTER TABLE tabname COMPRESS YES


檢視壓縮效果


select tabname ,data_object_l_size,data_object_p_size,dictionary_size from sysibmadm.admintabinfo where tabname = 'EMPLOYEE'


5.索引
B+數的每一個節點存放超過一組資料,所有的最終資料放在葉節點,中間的節點存放子節點的上限或者下限。
索引通過B+樹可以將鍵值快速定位到葉節點,葉節點儲存著一組RID,每個RID對應表中某個資料頁與slot,可定位一行資料。


索引列通常為查詢語句中的謂語列,索引可包含是一個欄位也可是包含多個欄位的複合索引,在複合索引中,先按照第一個鍵值排序,如果第一個鍵值相同而第二個不同則按照第二個鍵排序。在建立複合索引的時候要注意鍵值的順序,不同的鍵值順序帶來的搜尋效率可能會大相徑庭。使用者定義了索引後並不能保證每次訪問都會被使用,DB2優化器會判定使用索引是否能提高效率,如果使用索引不如全表掃描則不使用索引。




建立索引的語法
create index idx_album_itempo on albums(itemno)
albums 表的itemno 欄位建立普通索引idx_album_itempo
create unique index dba.empno on dba.employee(empno asc)
dba.employee 表的 empno 欄位建立唯一索引 dba.empno。當表建立了主鍵或者唯一鍵時,會自動建立唯一索引
create index item on stock(itemno) cluster
cluster表示叢集或者簇的意思,目的是儘量保持資料頁的物理順序與索引順序保持一致,預設下表資料是無序組織的,當按照某一範圍查詢資料時,如果資料量大,需要的IO是很大的,如果資料在物理上連續,那麼獲取資料的速度就會快。
create unique index empidx on employee(empno) include (lastname,firstname)
只有唯一索引可以指定include ,最長訪問的是員工工號和姓名,如果在員工號上建索引,查詢姓名時,先找到工號RID,然後從表中獲取姓名,至少需要兩次IO(索引頁IO和資料頁IO),使用include時,include的欄位會附加在索引鍵指向的RID上,這樣就不需要讀取資料頁了。
create index name on employee(fistrname ,lastnam)
建立複合索引
查看錶索引
[
[email protected]
~]$ db2 describe indexes for table DEPARTMENT
[[email protected] ~]$ db2 describe indexes for table DEPARTMENT show detail


6.序列
sequence是db2的一個物件,按照一定規則產生自動增加的數字序列。這個序列一般做主鍵,沒有其他意義。通過 NEXTVAL FOR seq_name 獲取下一個值,通過PREVVAL 返回序列前一個值。
語法:
create sequence my_seq
as bigint
start with 1
increment by 1
no maxvalue
cycle
cache 100
cache 的目的是將一組連續值先算出來,快取到記憶體中,每次獲取從記憶體獲得,用完再分配,如果連線斷開,值將丟失,下次啟動時從下組分配


db2 "insert into t1 values(nextval for my_seq , 'test')"