欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

[點(diǎn)晴永久免費(fèi)OA]鍵、索引、約束的理解及其區(qū)別

admin
2020年3月3日 1:59 本文熱度 2710

今天下午剛好沒事,把一些基礎(chǔ)性的概念理順一下,存檔,省的麻煩,嘿嘿

一.索引

1.       什么是索引?

索引是對(duì)數(shù)據(jù)庫(kù)表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu)。

在關(guān)系型數(shù)據(jù)庫(kù)中,索引是一種與表有關(guān)的數(shù)據(jù)庫(kù)結(jié)構(gòu),是事實(shí)存在的。它可以使對(duì)于表的select等等操作更加快速,相當(dāng)于一本書的目錄。

對(duì)于一張表,如果我們想要找到某一列符合特定值的記錄,第一種方法是全表搜索,匹配,然后把所有符合的記錄列出,但是這樣做會(huì)消耗大量數(shù)據(jù)庫(kù)系統(tǒng)時(shí)間,并造成大量磁盤I/O操作;第二種就是在表中建立索引,然后在索引中找到符合查詢條件的索引值,最后通過保存在索引中的ROWID(相當(dāng)于頁(yè)碼)快速找到表中對(duì)應(yīng)的記錄。

索引是一個(gè)單獨(dú)的、物理的數(shù)據(jù)庫(kù)結(jié)構(gòu),它是某個(gè)表中一列或若干列值的集合和相應(yīng)的指向表中物理標(biāo)識(shí)這些值的數(shù)據(jù)頁(yè)的邏輯指針清單。由此可知,索引是要消耗數(shù)據(jù)庫(kù)空間的。

并非所有的數(shù)據(jù)庫(kù)都以相同的方式使用索引。作為通用規(guī)則,只有當(dāng)經(jīng)常查詢索引列中的數(shù)據(jù)時(shí),才需要在表上創(chuàng)建索引。索引占用磁盤空間,并且降低添加、刪除和更新行的速度。在多數(shù)情況下,索引用于數(shù)據(jù)檢索的速度優(yōu)勢(shì)大大超過它的不足之處。但是,如果應(yīng)用程序非常頻繁地更新數(shù)據(jù)或磁盤空間有限,則可能需要限制索引的數(shù)量。

可以使用單列作為索引,也可以使用多列聯(lián)合作為索引。

2.    索引的優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

(1)大大加快數(shù)據(jù)的檢索速度;   

(2)創(chuàng)建唯一性索引,保證數(shù)據(jù)庫(kù)表中每一行數(shù)據(jù)的唯一性;   

(3)加速表和表之間的連接;   

(4)在使用分組和排序子句進(jìn)行數(shù)據(jù)檢索時(shí),可以顯著減少查詢中分組和排序的時(shí)間。

缺點(diǎn):

(1)索引需要占物理空間。   

(2)當(dāng)對(duì)表中的數(shù)據(jù)進(jìn)行增加、刪除和修改的時(shí)候,索引也要?jiǎng)討B(tài)的維護(hù),降低了數(shù)據(jù)的維護(hù)速度。

建立索引時(shí)的注意事項(xiàng):

(1)   考慮已在表上創(chuàng)建的索引數(shù)量。最好避免在單個(gè)表上有很多索引

(2)   檢查已在表上創(chuàng)建的索引的定義。最好避免包含共享列的重疊索引

(3)   檢查某列中唯一數(shù)據(jù)值的數(shù)量,并將該數(shù)量與表中的行數(shù)進(jìn)行比較。比如如果有1000w記錄,某字段為性別,只有男,女。也就是說一半的記錄都是重復(fù)的,這樣就要考慮是否還有必要建立索引了。

3.       一些索引類別

(1)       普通索引

也即不加任何限制的索引。可通過以下語(yǔ)句理解。

create table zjj_temp_1 (id number(10),first_name char(10),last_name char(10),age number(3),val number(10,2));

insert into zjj_temp_1 values(1,''junjie'',''zhang'',25,4000);

select * from zjj_temp_1;

此時(shí)一條記錄已經(jīng)插入進(jìn)入了。

create index zjj_temp_index_1 on zjj_temp_1(first_name);

                       --------建立索引

insert into zjj_temp_1 values(1,''junjie'',''zhang'',25,4000)

                       --------再次插入一條一模一樣的記錄

select * from zjj_temp_1;

Ok!兩條記錄出現(xiàn)了,也即此索引的作用是讓你再查找first_name為某一個(gè)特定值的記錄時(shí)速度更快而已,僅此而已。

(2)       唯一索引

一種索引,不允許具有索引值相同的行,從而禁止重復(fù)的索引或鍵值。系統(tǒng)在創(chuàng)建該索引時(shí)檢查是否有重復(fù)的鍵值,并在每次使用 INSERT 或 UPDATE 語(yǔ)句添加數(shù)據(jù)時(shí)進(jìn)行檢查。

繼續(xù)分析例子:

drop index zjj_temp_index_1; ----刪除上文創(chuàng)建的普通索引。

create unique index zjj_temp_1 on zjj_temp_1(id);

                                   ----建立唯一索引

數(shù)據(jù)庫(kù)報(bào)錯(cuò)了?

是的,說找到重復(fù)的關(guān)鍵字。

從上文我們可以看到,zjj_temp_1表中有兩條記錄,id都是1.

這樣是唯一索引是不允許的,所以自然就創(chuàng)建不起來了。

delete from zjj_temp_1 where rownum<2;  --刪除一行

create unique index zjj_temp_1 on zjj_temp_1(id);

                                  ----繼續(xù)創(chuàng)建,發(fā)現(xiàn)這次成功了。

insert into zjj_temp_1 values(2,''junjie'',''zhang'',25,4000);

                                  ----成功

insert into zjj_temp_1 values(1,''kesi'',''ma'',25,4000); 失敗!!!

耶!就是這樣!

(3)       主鍵索引

數(shù)據(jù)庫(kù)表經(jīng)常有一列或列組合,其值唯一標(biāo)識(shí)表中的每一行。該列稱為表的主鍵。它和唯一索引的共性在于都不允許有重復(fù)記錄,區(qū)別在于,唯一索引是不限制null的,也就是說或可以有一條以上的null值插入,但是主鍵卻限定不能為空。

繼續(xù)執(zhí)行語(yǔ)句:

insert into zjj_temp_1 values(null,''kesi'',''ma'',25,4000);  ---成功

select * from zjj_temp_1;

這就表明唯一索引是允許有空值的。

Drop index zjj_temp_1; ---刪除唯一索引

alter table zjj_temp_1 add constraint zjsy_1 primary key(id);                  ---建立主鍵

我們可以發(fā)現(xiàn)id有一條記錄為空,所以是無法建立主鍵的。

刪除那條空記錄就可以了。

(4)       聚簇索引和非聚簇索引

聚簇索引也叫簇類索引,是一種對(duì)磁盤上實(shí)際數(shù)據(jù)重新組織以按指定的一個(gè)或多個(gè)列的值排序。由于聚簇索引的索引頁(yè)面指針指向數(shù)據(jù)頁(yè)面,所以使用聚簇索引查找數(shù)據(jù)幾乎總是比使用非聚簇索引快。每張表只能建一個(gè)聚簇索引,并且建聚簇索引需要至少相當(dāng)該表120%的附加空間,以存放該表的副本和索引中間頁(yè)。

 

聚簇是根據(jù)碼值找到數(shù)據(jù)的物理存儲(chǔ)位置,從而達(dá)到快速檢索數(shù)據(jù)的目的。Oracle聚簇索引的順序就是數(shù)據(jù)的物理存儲(chǔ)順序,葉節(jié)點(diǎn)就是數(shù)據(jù)節(jié)點(diǎn)。非聚簇索引的順序與數(shù)據(jù)物理排列順序無關(guān),葉節(jié)點(diǎn)仍然是索引節(jié)點(diǎn),只不過有一個(gè)指針指向?qū)?yīng)的數(shù)據(jù)塊。由于聚簇索引要按照索引排序,所以一個(gè)表最多只能有一個(gè)聚簇索引,但可以使用多列。

ORACLE中的聚簇表是指兩個(gè)表有一個(gè)字段完全相同,并且在業(yè)務(wù)中經(jīng)常會(huì)按這個(gè)字段為目標(biāo)連接這兩個(gè)表,這時(shí)建立聚簇表,
 兩個(gè)表公用一個(gè)字段,能減少占用空間,并能明顯提高連接查詢速度。

這兩篇都有實(shí)際的例子,這里就不再深入討論了。

建立聚簇索引的思想

1、大多數(shù)表都應(yīng)該有聚簇索引或使用分區(qū)來降低對(duì)表尾頁(yè)的競(jìng)爭(zhēng),在一個(gè)高事務(wù)的環(huán)境中,對(duì)最后一頁(yè)的封鎖嚴(yán)重影響系統(tǒng)的吞吐量。   

2、在聚簇索引下,數(shù)據(jù)在物理上按順序排在數(shù)據(jù)頁(yè)上,重復(fù)值也排在一起,因而在那些包含范圍檢查(between、<、<=、<>、>=)或使用group by或orderby的查詢時(shí),一旦找到具有范圍中第一個(gè)鍵值的行,具有后續(xù)索引值的行保證物理上毗連在一起而不必進(jìn)一步搜索,避免了大范圍掃描,可以大大提高查詢速度。   

3、在一個(gè)頻繁發(fā)生插入操作的表上建立聚簇索引時(shí),不要建在具有單調(diào)上升值的列(如IDENTITY)上,否則會(huì)經(jīng)常引起封鎖沖突。   

4、在聚簇索引中不要包含經(jīng)常修改的列,因?yàn)榇a值修改后,數(shù)據(jù)行必須移動(dòng)到新的位置。   

5、選擇聚簇索引應(yīng)基于where子句和連接操作的類型。

本文編輯:插秧機(jī),http://www.cgjfg.com/


該文章在 2020/3/3 1:59:26 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved