1. 程式人生 > >資料庫中索引的作用和優缺點

資料庫中索引的作用和優缺點

下文主要介紹資料庫索引的作用和優缺點

為什麼要建立索引呢?這是因為,建立索引可以大大提高系統的效能。

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

也許會有人要問:增加索引有如此多的優點,為什麼不對錶中的每一個列建立一個索引呢?這種想法固然有其合理性,然而也有其片面性。雖然,索引有許多優點, 但是,為表中的每一個列都增加索引,是非常不明智的。這是因為,增加索引也有許多不利的一個方面。

第一,建立索引和維護索引要耗費時間,這種時間消耗會隨著資料量的增加而增加。 
第二,索引需要佔物理空間,除了資料表佔資料空間之外,每一個索引還要佔一定的物理空間,如果要建立聚簇索引,那麼需要的空間就會更大。 
第三,當對錶中的資料進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了資料的維護速度。

索引是建立在資料庫表中的某些列的上面。因此,在建立索引的時候,應該仔細考慮在哪些列上可以建立索引,在哪些列上不能建立索引。一般來說,應該在這些列 上建立索引,例如:

1.在經常需要搜尋的列上,可以加快搜索的速度; 
2.在作為主鍵的列上,強制該列的唯一性和組織表中資料的排列結構; 
3.在經常用在連線的列上,這 些列主要是一些外來鍵,可以加快連線的速度; 
4.在經常需要根據範圍進行搜尋的列上建立索引,因為索引已經排序,其指定的範圍是連續的; 
5.在經常需要排序的列上創 建索引,因為索引已經排序,這樣查詢可以利用索引的排序,加快排序查詢時間; 
6.在經常使用在WHERE子句中的列上面建立索引,加快條件的判斷速度。

同樣,對於有些列不應該建立索引。一般來說,不應該建立索引的的這些列具有下列特點:

    第一,對於那些在查詢中很少使用或者參考的列不應該建立索引。這是因為,既然這些列很少使用到,
因此有索引或者無索引,並不能提高查詢速度。相反,由於增加了索引,反而降低了系統的維護速度和增大了空間需求。 
    第二,對於那 些只有很少資料值的列也不應該增加索引。這是因為,由於這些列的取值很少,
    例如人事表的性別列,在查詢的結果中,結果集的資料行佔了表中資料行的很大比例,
    即需要在表中搜索的資料行的比例很大。增加索引,並不能明顯加快檢索速度。 
    第三,對於那些定義為text, image和bit資料型別的列不應該增加索引。這是因為,這些列的資料量要麼相當大,要麼取值很少。 
    第四,當修改效能遠遠大於檢索效能時,不應該建立索 引。這是因為,修改效能和檢索效能是互相矛盾的。當增加索引
時,會提高檢索效能,但是會降低修改效能。當減少索引時,會提高修改效能,降低檢索效能。因此,當修改效能遠遠大於
檢索效能時,不應該建立索引。

相關推薦

資料庫索引作用優缺點

下文主要介紹資料庫索引的作用和優缺點 為什麼要建立索引呢?這是因為,建立索引可以大大提高系統的效能。 一,通過建立唯一性索引,可以保證資料庫表中每一行資料的唯一性。 二,可以大大加快 資料的檢索速度,這也是建立索引的最主要的原因。 三,可以加速表和表之

MySQL資料庫主鍵外來鍵的操作

在MySQL資料庫中,一般會涉及到主鍵和外來鍵,在上一個表中添加了主鍵之後,通常在下一個表中要新增外來鍵,但是添加了外來鍵之後,在實體類和資料庫中在加上上一個表的主鍵會比較好,這樣兩個表關聯之後,在上一個表查詢完成之後,將查詢是出來的欄位拿著去下一個庫裡查詢,會比較好。 select * fro

TiDB如何在分散式資料庫組合OLTPOLAP

TiDB功能 TiDB的核心功能包括彈性水平可伸縮性,具有ACID保證的分散式事務,高可用性以及實時事務資料的實時分析。讓我們來看看這些功能背後的平臺架構。TiDB平臺具有以下元件: TiDB:與Go相容的無狀態SQL層,內置於Go。 TiKV:一個分散式事務鍵值儲存,用Rust構建。(Ti

日期型別的資料在Oracle資料庫的儲存查詢

使用Oracle資料庫,mybatis的對映檔案中日期型別的資料,如果定義為<result column =“UPDATED_DATE" jdbcType =“DATE” property =“updatedDate”/>,即使在後臺你為日期賦予年月日時分秒,但儲存到資料庫中將只

建立表、修改表、刪除表的方法 ,建立主鍵約束、外來鍵約束、使用者自定義約束的方法 ,建立查詢表的方法及使用截斷表的方法,理解約束在資料庫作用

撰寫人——軟工二班——陳喜平 – 實驗內容: – 一、建立表 – 建立圖書館管理系統所涉及的表 – 建立產品銷售系統所涉及的表 – 圖書表book(bid,bname,price,qty) – 書庫表lib(lid,lname,address) – 讀者表reader

Java儲存資料庫時間戳php操作資料庫時間戳的關係

一直困擾我的問題,終於得到了解決!原先以為是自己系統問題(其實也可以確定自己的系統是64位),於是利用一下程式碼測試自己的系統是不是有問題,得到的結果是沒問題的,但是就是無正確結果輸出。於是解決問題途徑是在strtotime()函式和date(format,time())函式之間徘徊。

PHP的JSON索引陣列關聯陣列

索引陣列和關聯陣列 PHP支援兩種陣列,一種是隻儲存"值"(value)的索引陣列(indexed array),另一種是儲存"名值對"(name/value)的關聯陣列(associative array)。 由於javascript不支援關聯陣列,所以json_encode()只將索引陣列(

資料庫基礎知識:資料庫的約束三大正規化

一.資料庫中的正規化:   正規化, 英文名稱是 Normal Form,它是英國人 E.F.Codd(關係資料庫的老祖宗)在上個世紀70年代提出關係資料庫模型後總結出來的,正規化是關係資料庫理論的基礎,也是我們在設計資料庫結構過程中所要遵循的規則和指導方法,以下就是對

mysql進階(十一)外來鍵在資料庫作用

MySQL外來鍵在資料庫中的作用      MySQL外來鍵的目的是控制儲存在外來鍵表中的資料,使兩張表形成關聯,是MySQL資料庫中非常重要的組成部分,值得我們去深入瞭解。那麼,MySQL外來鍵究竟起到哪些作用呢?下文就將帶您一探其中的祕密。MySQL外來鍵的作用    

資料庫索引的理解

在資料庫中,資料量很大,而索引的主要作用是可以加快查詢的速度,提高查詢的效率 原理是:給欄位加索引之後,該欄位就會按照一定的方式進行排列;且簡歷的索引只對該欄位有效,若換一個欄位查詢,則該索引也就無效了; 索引能夠加快查詢速度的原理:資料庫在執行一條SQL語句時

資料庫的unionunion all join的區別

union在資料庫運算中會過濾掉重複資料,並且合併之後的是根據行合併的,即:如果a表和b表中的資料各有五行,且有兩行是重複資料,合併之後為8行。運用場景:適合於需要進行統計的運算union all是進行全部合併運算的,即:如果a表和b表中的資料各有五行,且有兩行是重複資料,合

面試題(一)- 談談你對資料庫索引的理解

轉載自《http://www.cnblogs.com/newpanderking/p/3781043.html》 1、首先要明白無名無實莫要用索引:因為資料中的記錄很多,為了方便我們查詢,提高查詢的效率; 2、索引的原理:對要查詢的欄位建立索引其實就是把該欄位按照一定的

B樹在儲存作用優點

1.http://blog.csdn.net/ch18255112191/article/details/48246939 B樹的增加刪除節點的原理 2.http://blog.csdn.net/xrymibz/article/details/72420607    機械

資料庫主庫從庫的關係

主從資料庫的建立一般基於以下三個方面考慮:1、容災:備庫在異地,主庫不存在了,備庫可以立即接管,無須恢復時間2、負載均衡:主庫做增刪改,備庫做查詢,這樣很多查詢業務不佔用主庫資源3、資料集中和分發:此

MySQL外來鍵在資料庫作用

MySQL外來鍵的目的是控制儲存在外來鍵表中的資料,使兩張表形成關聯,是MySQL資料庫中非常重要的組成部分,值得我們去深入瞭解。那麼,MySQL外來鍵究竟起到哪些作用呢?下文就將帶您一探其中的祕密。 MySQL外來鍵的作用: 保持資料一致性,完整性,主要目的是控制儲

資料庫索引失效(原因)

容易引起oracle索引失效的原因很多: 1、在索引列上使用函式。如SUBSTR,DECODE,INSTR等,對索引列進行運算.需要建立函式索引就可以解決了。 2、新建的表還沒來得及生成統計資訊,分析一下就好了 3、基於cost的成本分析,訪問的表過小,使用全表掃描的消

資料庫sequence的作用用法

seqence的作用: sequence號是資料庫系統按照一定規則自增的數字序列,因為自增所以不會重複。目前就我所瞭解的sequence的作用主要有兩個方面。 一:作為代理主鍵,唯一識別; 二:用於記錄資料庫中最新動作的語句,只要語句有動作(I/U/D等),sequence

資料庫,onwhere使用時機的分析

資料庫查詢中on和where關鍵字使用的時機:首先說下連表查詢,資料庫在通過連線查詢兩張表或者多張表時,會生成一箇中間表,而我們看到的就是這個中間表。以左連結(左連結不再贅述,不瞭解的自行百度哈)為例說明,如下sql語句:Select * from book left joi

Oracle資料庫truncate命令delete命令的區別

首先講一下,truncate命令: 語法:TRUNCATE  TABLE  table; 表格裡的資料被清空,儲存空間被釋放。 執行後會自動提交,包括之前其它未提交的會話,因而一旦清空無法回退。 只有表格的建立者或者其他擁有刪除任意表格許可權的使用者(如DBA)才能清空表格。 TRUNCATE  TABL

資料庫的CatalogSchema

按照SQL標準的解釋,在SQL環境下Catalog和Schema都屬於抽象概念,可以把它們理解為一個容器或者資料庫物件名稱空間中的一個層次,主要 用來解決命名衝突問題。從概念上說,一個數據庫系統包含多個Catalog,每個Catalog又包含多個Schema,而每個Schem