當前位置:首頁 » 操作系統 » 資料庫索引有什麼用

資料庫索引有什麼用

發布時間: 2022-07-08 01:10:09

資料庫索引是什麼,有什麼優點和缺點

資料庫中索引的優缺點
為什麼要創建索引呢?這是因為,創建索引可以大大提高系統的性能。第一,通過創建唯一性索引,可以保證資料庫表中每一行數據的唯一性。第二,可以大大加快數據的檢索速度,這也是創建索引的最主要的原因。第三,可以加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義。第四,在使用分組和排序子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間。第五,通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的性能。
也許會有人要問:增加索引有如此多的優點,為什麼不對表中的每一個列創建一個索引呢?這種想法固然有其合理性,然而也有其片面性。雖然,索引有許多優點,但是,為表中的每一個列都增加索引,是非常不明智的。這是因為,增加索引也有許多不利的一個方面。第一,創建索引和維護索引要耗費時間,這種時間隨著數據量的增加而增加。第二,索引需要佔物理空間,除了數據表占數據空間之外,每一個索引還要佔一定的物理空間,如果要建立聚簇索引,那麼需要的空間就會更大。第三,當對表中的數據進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了數據的維護速度。
索引是建立在資料庫表中的某些列的上面。因此,在創建索引的時候,應該仔細考慮在哪些列上可以創建索引,在哪些列上不能創建索引。一般來說,應該在這些列上創建索引,例如:在經常需要搜索的列上,可以加快搜索的速度;在作為主鍵的列上,強制該列的唯一性和組織表中數據的排列結構;在經常用在連接的列上,這些列主要是一些外鍵,可以加快連接的速度;在經常需要根據范圍進行搜索的列上創建索引,因為索引已經排序,其指定的范圍是連續的;在經常需要排序的列上創建索引,因為索引已經排序,這樣查詢可以利用索引的排序,加快排序查詢時間;在經常使用在WHERE子句中的列上面創建索引,加快條件的判斷速度。
同樣,對於有些列不應該創建索引。一般來說,不應該創建索引的的這些列具有下列特點:第一,對於那些在查詢中很少使用或者參考的列不應該創建索引。這是因為,既然這些列很少使用到,因此有索引或者無索引,並不能提高查詢速度。相反,由於增加了索引,反而降低了系統的維護速度和增大了空間需求。第二,對於那些只有很少數據值的列也不應該增加索引。這是因為,由於這些列的取值很少,例如人事表的性別列,在查詢的結果中,結果集的數據行佔了表中數據行的很大比例,即需要在表中搜索的數據行的比例很大。增加索引,並不能明顯加快檢索速度。第三,對於那些定義為text,
image和bit數據類型的列不應該增加索引。這是因為,這些列的數據量要麼相當大,要麼取值很少。第四,當修改性能遠遠大於檢索性能時,不應該創建索引。這是因為,修改性能和檢索性能是互相矛盾的。當增加索引時,會提高檢索性能,但是會降低修改性能。當減少索引時,會提高修改性能,降低檢索性能。因此,當修改性能遠遠大於檢索性能時,不應該創建索引。

❷ 資料庫索引有什麼作用和好處

資料庫索引是為了增加查詢速度而對表欄位附加的一種標識。見過很多人機械的理解索引的概念,認為增加索引只有好處沒有壞處。這里想把之前的索引學習筆記總結一下:
首先明白為什麼索引會增加速度,DB在執行一條sql語句的時候,默認的方式是根據搜索條件進行全表掃描,遇到匹配條件的就加入搜索結果集合。如果我們對某一欄位增加索引,查詢時就會先去索引列表中一次定位到特定值的行數,大大減少遍歷匹配的行數,所以能明顯增加查詢的速度。那麼在任何時候都應該加索引么?這里有幾個反例:1、如果每次都需要取到所有表記錄,無論如何都必須進行全表掃描了,那麼是否加索引也沒有意義了。2、對非唯一的欄位,例如「性別」這種大量重復值的欄位,增加索引也沒有什麼意義。3、對於記錄比較少的表,增加索引不會帶來速度的優化反而浪費了存儲空間,因為索引是需要存儲空間的,而且有個致命缺點是對於update/insert/delete的每次執行,欄位的索引都必須重新計算更新。
那麼在什麼時候適合加上索引呢?我們看一個Mysql手冊中舉的例子,這里有一條sql語句:
SELECT
c.companyID,
c.companyName
FROM
Companies
c,
User
u
WHERE
c.companyID
=
u.fk_companyID
AND
c.numEmployees
>=
0
AND
c.companyName
LIKE
'%i%'
AND
u.groupID
IN
(SELECT
g.groupID
FROM
Groups
g
WHERE
g.groupLabel
=
'Executive')
這條語句涉及3個表的聯接,並且包括了許多搜索條件比如大小比較,Like匹配等。在沒有索引的情況下Mysql需要執行的掃描行數是77721876行。而我們通過在companyID和groupLabel兩個欄位上加上索引之後,掃描的行數只需要134行。在Mysql中可以通過Explain
Select來查看掃描次數。可以看出來在這種聯表和復雜搜索條件的情況下,索引帶來的性能提升遠比它所佔據的磁碟空間要重要得多。
那麼索引是如何實現的呢?大多數DB廠商實現索引都是基於一種數據結構——B樹。因為B樹的特點就是適合在磁碟等直接存儲設備上組織動態查找表。B樹的定義是這樣的:一棵m(m>=3)階的B樹是滿足下列條件的m叉樹:
1、每個結點包括如下作用域(j,
p0,
k1,
p1,
k2,
p2,
...
ki,
pi)
其中j是關鍵字個數,p是孩子指針
2、所有葉子結點在同一層上,層數等於樹高h
3、每個非根結點包含的關鍵字個數滿足[m/2-1]<=j<=m-1
4、若樹非空,則根至少有1個關鍵字,若根非葉子,則至少有2棵子樹,至多有m棵子樹
看一個B樹的例子,針對26個英文字母的B樹可以這樣構造:
可以看到在這棵B樹搜索英文字母復雜度只為o(m),在數據量比較大的情況下,這樣的結構可以大大增加查詢速度。然而有另外一種數據結構查詢的虛度比B樹更快——散列表。Hash表的定義是這樣的:設所有可能出現的關鍵字集合為u,實際發生存儲的關鍵字記為k,而|k|比|u|小很多。散列方法是通過散列函數h將u映射到表T[0,m-1]的下標上,這樣u中的關鍵字為變數,以h為函數運算結果即為相應結點的存儲地址。從而達到可以在o(1)的時間內完成查找。
然而散列表有一個缺陷,那就是散列沖突,即兩個關鍵字通過散列函數計算出了相同的結果。設m和n分別表示散列表的長度和填滿的結點數,n/m為散列表的填裝因子,因子越大,表示散列沖突的機會越大。
因為有這樣的缺陷,所以資料庫不會使用散列表來做為索引的默認實現,Mysql宣稱會根據執行查詢格式嘗試將基於磁碟的B樹索引轉變為和合適的散列索引以追求進一步提高搜索速度。我想其它資料庫廠商也會有類似的策略,畢竟在資料庫戰場上,搜索速度和管理安全一樣是非常重要的競爭點。

❸ 資料庫索引的功能是什麼

資料庫中的索引使您可以快速找到表或索引視圖中的特定信息。索引包含從表或視圖中一個或多個列生成的鍵,以及映射到指定數據的存儲位置的指針。通過創建設計良好的索引以支持查詢,可以顯著提高資料庫查詢和應用程序的性能。索引可以減少為返回查詢結果集而必須讀取的數據量。索引還可以強製表中的行具有唯一性,從而確保表數據的數據完整性。

❹ 資料庫中的索引是什麼意思

什麼是索引:
索引是資料庫存儲引擎用於快速查找到指定數據的一種數據結構。
可以用新華字典做類比:如果新華字典中對每個字的詳細解釋是資料庫中表的記錄,那麼按部首或拼音等排序的目錄就是索引,使用它可以讓我們快速查找的某一個字詳細解釋的位置。
在MySQL中,存儲引擎也是用了類似的方法,先在索引中找到對應的值,然後再根據匹配的索引值找到對應表中記錄的位置。
面試中為什麼問索引:
之所以在索引在面試中經常被問到,就是因為:索引是資料庫的良好性能表現的關鍵,也是對查詢能優化最有效的手段。索引能夠輕易地把查詢性能提高幾個數量級。
然而,糟糕的索引也同樣會影響查詢性能,當表中的數據量越來越多的時候,索引對性能的影響就越大。在數據量比較少並且負責比較低的時候,糟糕的索引對性能的影響可能不明顯,但是當數據量逐漸增多的時候,性能會急劇下降。
索引的類型:
不同類型的索引,可以為不同場景提供更好的性能。在MySQL中,索引是在存儲引擎層面實現的,而不是在伺服器層面實現的。正如大家所知道,MySQL支持多種類型的存儲引擎。所以,在不同存儲引擎中索引的實現方式並不是一樣的,也不是所有類型的索引都被所有存儲引擎支持的,即使多個存儲引擎支持同一種類型的索引,它底層的實現也有可能是不相同的。

❺ 資料庫中的索引是什麼意思有什麼用途

索引是一種單獨的、物理的對資料庫表中一列或多列的值進行排序的一種存儲結構,它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的數據頁的邏輯指針清單。索引的作用相當於圖書的目錄,可以根據目錄中的頁碼快速找到所需的內容。

一個索引是存儲的表中一個特定列的值數據結構(最常見的是B-Tree,還有哈希表索引和R-tree)。索引是在表的列上創建。所以,要記住的關鍵點是索引包含一個表中列的值,並且這些值存儲在一個數據結構中。請記住記住這一點:索引是一種數據結構

使用索引的全部意義就是通過縮小一張表中需要查詢的記錄(行)的數目來加快搜索的速度

假設有一張學生名單表,有一百條數據。要查詢其中名字為 小明 的學生。

一般採取select * from students where name ='小明';由於我們想要得到每一個名字為小明的學生信息,在查詢到第一個符合條件的行後,不能停止查詢,因為可能還有其他符合條件的行。所以,必須一行一行的查找直到最後一行-這就意味資料庫不得不檢查上千行數據才能找到所以名字為小明的學生。這就是所謂的全表掃描。

假設我們在 name這一列上創建一個B-Tree索引。當我們用SQL查找名字是『小明』的學生時,不需要再掃描全表。而是用索引查找去查找名字為『小明』的學生,因為索引已經按照按字母順序排序。索引已經排序意味著查詢一個名字會快很多,因為名字首字母為『小』的學生都是排列在一起的。另外重要的一點是,索引同時存儲了表中相應行的指針以獲取其他列的數據。

❻ 設計資料庫中的索引有什麼作用

索引
可以利用索引快速訪問資料庫表中的特定信息。索引是對資料庫表中一個或多個列(例如,employee 表的姓氏 (lname) 列)的值進行排序的結構。如果想按特定職員的姓來查找他或她,則與在表中搜索所有的行相比,索引有助於更快地獲取信息。

索引提供指針以指向存儲在表中指定列的數據值,然後根據指定的排序次序排列這些指針。資料庫使用索引的方式與使用書的目錄很相似:通過搜索索引找到特定的值,然後跟隨指針到達包含該值的行。

❼ 設計資料庫中的索引有什麼作用

設計資料庫中的索引可以大大提高系統的性能:

1、通過創建唯一性索引,可以保證資料庫表中每一行數據的唯一性。

2、可以大大加快數據的檢索速度,這也是創建索引的最主要的原因。

3、可以加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義。

4、在使用分組和排序 子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間。

5、通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的性能。

(7)資料庫索引有什麼用擴展閱讀

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

1、在經常需要搜索的列上,可以加快搜索的速度。

2、在作為主鍵的列上,強制該列的唯一性和組織表中數據的排列結構。

3、在經常用在連接的列上,這 些列主要是一些外鍵,可以加快連接的速度。

4、在經常需要根據范圍進行搜索的列上創建索引,因為索引已經排序,其指定的范圍是連續的。

5、在經常需要排序的列上創 建索引,因為索引已經排序,這樣查詢可以利用索引的排序,加快排序查詢時間。

6、在經常使用在WHERE子句中的列上面創建索引,加快條件的判斷速度。

❽ 資料庫索引是什麼,有什麼用,怎麼用

1、資料庫索引是什麼,有什麼用

資料庫索引是對資料庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問資料庫表中的特定信息。如果想按特定職員的姓來查找他或她,則與在表中搜索所有的行相比,索引有助於更快地獲取信息。

索引的一個主要目的就是加快檢索表中數據的方法,亦即能協助信息搜索者盡快的找到符合限制條件的記錄ID的輔助數據結構。

2、資料庫索引的用法

當表中有大量記錄時,若要對表進行查詢,第一種搜索信息方式是全表搜索,是將所有記錄一一取出,和查詢條件進行一一對比,然後返回滿足條件的記錄,這樣做會消耗大量資料庫系統時間,並造成大量磁碟I/O操作;

第二種就是在表中建立索引,然後在索引中找到符合查詢條件的索引值,最後通過保存在索引中的ROWID(相當於頁碼)快速找到表中對應的記錄。

索引是一個單獨的、物理的資料庫結構,它是某個表中一列或若干列值的集合和相應的指向表中物理標識值的數據頁的邏輯指針清單。

(8)資料庫索引有什麼用擴展閱讀:

一、索引的原理:

對要查詢的欄位建立索引其實就是把該欄位按照一定的方式排序;建立的索引只對該欄位有用,如果查詢的欄位改變,那麼這個索引也就無效了,比如圖書館的書是按照書名的第一個字母排序的,那麼你想要找作者叫張三的就不能用改索引了;還有就是如果索引太多會降低查詢的速度。

二、資料庫索引的特點:

1、避免進行資料庫全表的掃描,大多數情況,只需要掃描較少的索引頁和數據頁,而不是查詢所有數據頁。而且對於非聚集索引,有時不需要訪問數據頁即可得到數據。

2、聚集索引可以避免數據插入操作,集中於表的最後一個數據頁面。

3、在某些情況下,索引可以避免排序操作。

❾ 資料庫中的索引有什麼用

先正面回答你的問題
數據是否重復不是建立索引的重要依據,甚至都不是依據。
只要不完全重復(所有元組的該元素都一樣),那麼建立索引就是有意義的。
即使當前數據完全重復,也不是不能建立索引,這種情況有點復雜,不細說了。
對於你後面的疑問,可以給你一個如何建立索引的忠告,「如何查就如何建」。
索引的建立,唯一的原因就是為了查詢(廣義的查詢),實際上建立索引會使得數據存儲所佔空間變大,有時索引所佔的空間會查過數據本身的空間。索引的建立也會使得數據插入時變慢,特殊情況下,慢的難以忍受,所以dba的重要工作之一,就是檢查索引層級並優化。
索引建立的唯一好處,就是按照索引查詢時,變快了。type,status這2個欄位是否適合建立索引,就要看你是否要按照這2個欄位進行檢索。而檢索的順序決定了如何建立索引。
對於索引類型和索引方式,我建議就
normal

btree
就適用於大多數情況。若你參與的是一個大數據處理項目,對數據存儲和檢索有特別要求,那麼需要分析多個層面,比如數據吞吐量、數據的方差、平均差等等很多參數才考慮是否用聚集索引等(mysql好像還沒聚集索引),至於是否是唯一索引,我建議不使用,即使能判定數據是唯一的也不要用,全文索引也沒有必要。

❿ 計算機資料庫中的索引有什麼用

表的索引就相當於一本詞典的目錄,
這樣查找的時候就可以迅速定位到需要的位置,
根本不必考慮前後的數據,
可以極大加快檢索速度
比如:要檢索table表field欄位中所有等於"abc"的值
因為已經建立索引,
資料庫系統會迅速找到a開頭的記錄,
而且可以保證,
在這條記錄之前肯定沒有符合的記錄了,
因為已經是按順序的了
如果沒有索引,
就只能一條一條的比較

熱點內容
智能車演算法 發布:2024-11-19 12:34:49 瀏覽:777
linuxredis啟動腳本 發布:2024-11-19 12:31:35 瀏覽:955
刀片機電腦系統在伺服器端 發布:2024-11-19 12:27:16 瀏覽:861
設備監控源碼 發布:2024-11-19 12:26:21 瀏覽:922
伺服器主板是什麼樣子 發布:2024-11-19 12:08:19 瀏覽:889
奧迪配置怎麼比較 發布:2024-11-19 12:07:33 瀏覽:522
連接共享列印機無許可權訪問許可權 發布:2024-11-19 12:04:01 瀏覽:294
大眾速騰車載carplay安卓怎麼連接 發布:2024-11-19 11:57:12 瀏覽:515
電腦軟體用戶密碼是什麼 發布:2024-11-19 11:51:25 瀏覽:913
java循環break 發布:2024-11-19 11:50:50 瀏覽:845