數據庫索引與自增序列


索引

索引的優缺點

優點:創建索引可以大大提高系統的性能。

第一,通過創建唯一性索引,可以保證數據庫表中每一行數據的唯一性。
第二,可以大大加快 數據的檢索速度,這也是創建索引的最主要的原因。
第三,可以加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義。
第四,在使用分組和排序 子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間。
第五,通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的性能。

缺點:降低了系統的維護速度和增大了空間需求
第一,創建索引和維護索引要耗費時間,這種時間隨着數據 量的增加而增加。
第二,索引需要占物理空間,除了數據表占數據空間之外,每一個索引還要占一定的物理空間,如果要建立聚簇索引,那么需要的空間就會更大。
第三,當對表中的數據進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了數據的維護速度。

主鍵,外鍵

(primary key[列名,[列名]])

create table emp (  
	id number(6) primary key,--主鍵  
	name varchar2(20) not null,--非空  
	sex number(1),  
	age number(3) default 18,    
	email varchar2(25) unique,--唯一  
	deptno number(2) references dept(deptno)—外鍵  
);  

帶約束名稱:

create table emp (  
	id number(6) constraint id_pk primary key,  
	name varchar2(20) constraint name_nn not null,  
	sex number(1),  
	age number(3) default 18,   
	email varchar2(25) constraint email_uqe unique,  
	deptno number(2) constraint dept_deptno_ref references dept(deptno)  
);  

列模式:

create table emp (  
	id number(6),  
	name varchar2(20),  
	sex number(1),  
	age number(3) default 18,  
	email varchar2(25),  
	deptno number(2),  
	constraint id_pk primary key (id),--也可以兩個以上,聯合主鍵  
	constraint dept_deptno_ref foreign key (deptno) references dept(deptno),  
	constraint emial_name_uqe unique (email, name)  
); 

主鍵索引

主鍵一定是唯一性索引,唯一性索引並不一定就是主鍵。

主鍵就是能夠唯一標識表中某一行的屬性或屬性組,一個表只能有一個主鍵,但可以有多個候選索引。因為主鍵可以唯一標識某一行記錄,所以可以確保執行數據更新、刪除的時候不會出現張冠李戴的錯誤。主鍵除了上述作用外,常常與外鍵構成參照完整性約束,防止出現數據不一致。數據庫在設計時,主鍵起到了很重要的作用。
主鍵可以保證記錄的唯一和主鍵域非空,數據庫管理系統對於主鍵自動生成唯一索引,所以主鍵也是一個特殊的索引。

**唯一索引 **

  • **create unique index idx_emp_ename on 表名(column); **

創建索引

普通索引:

  • **create index 索引名 on dept(column); **

聯合索引:

  • create index 索引名 on dept(column[, column[, column]]);

**反向鍵索引 **

  • **create index 索引名 on 表名(column) reverse; **

**位圖索引 **

  • **create bitmap index 索引名 on 表名(column); **

**索引組織表,一定要有主鍵 **

create table tab (  
	id int primary key,  
	name varchar2(20)  
) organization index; 

注:索引組織表的insert效率非常低

**分區表索引 **
create index 索引名 on table(column) local/global;

  提示:當給表創建主鍵或唯一鍵約束時,系統也會創建一個約束給該字段;同樣創建索引也會占用數據庫空間;索引在訪問、查詢的時候效率有提高,但是在修改表的時候效率就會降低;

自動增長序列

mysql

mysql不自帶sequence,但是可以設置自動增長序列,設置是必須要有主鍵(primary key)

創建表時創建

creat table emp(

id int auto_increment primary key,
.....

);

創建表后添加

  • alter table emp add id int auto_increment primary key;

設置自增序列的啟始值

  • alter table emp auto_increment=2;

注:也可以讓自增序列值從123變為2,從2重新開始;

oracle

創建自增序列

  • **create sequence 序列名; **
  • select seq.nextval from dual;

使用時的名字為

  • **序列名.nextval **

**create sequence 序列名
start with 2 –從2開始
increment by 3—每次加3
nomaxvalue—沒有最大值
minvalue 1—最小值1
nocycle—不循環
nocache;--不緩存 **

**修改序列的序列值 **

**alter sequence seqtab
maxvalue 1000; **

注:不能修改為起始值

修改序列值可以先查詢出來再increment修改回來

select sql.nextval from dual;

alter sequence seq increment by 79;

序列已更改

創建視圖

如果需要經常執行某項復雜的查詢,可以基於復雜查詢建立此視圖即可,簡化復雜查詢;
視圖本質上就是一條select語句,所以當訪問視圖時,只能訪問到所對應的的select語句中涉及到的列,對基表中的其他列起到安全和保密的作用,可以限制數據訪問

授權創建視圖

  • crant create view to 用戶

創建視圖

  • crate view 視圖名 as select * from 表名 where ···

查看視圖結構

  • select * from 視圖名


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM