資料庫索引 1

2021-08-30 04:17:57 字數 2258 閱讀 6943

資料庫索引

概念:索引是對資料庫表中一列或者多列的值進行排序的一種結構,使用索引可快速訪問資料庫表中的特定資訊。如果想按特定職員的姓名來查詢他或她,則在表中搜尋所有的行進行比較,索引有助於更快的獲取資訊。

索引分為聚簇索引和非聚簇索引,聚簇索引是按照資料存放的物理位置為順序的,而非聚簇索引不一樣;聚簇索引能提高多行檢索的速度,而非聚簇索引對於單行的檢索很快。

根據資料庫的功能 ,可以再資料庫設計器中建立三種索引:唯一索引,主鍵索引和聚集索引。

唯一索引:不允許其中任何兩行具有相同索引值的索引。當資料庫中存在重複的鍵值時,大多數資料庫不允許將新建立的唯一索引與表一起儲存。資料庫還可能防止新增將在表中建立重複鍵值的新資料。例如:如果在職員的姓上建立了唯一索引,則任何兩個員工都不能同姓。

主鍵索引:資料庫表經常有一列或多列組合,其值唯一標識表中的每一行。該列稱為表的主鍵。在資料庫關係圖中為表定義主鍵將自動建立主鍵索引,主鍵索引是唯一索引的特定型別。該索引要求主鍵中每個鍵值都唯一。當在查詢中使用主鍵索引時,他還允許對資料的快速訪問。

聚集索引:在聚集索引中,表中行的物理順序與鍵值的邏輯(索引)順序相同。乙個表只能包含乙個聚集索引。如果某索引不是聚集索引,則表中行的物理順序與鍵值的邏輯順序不匹配。與非聚集索引相比,聚集索引通常提供更快的資料訪問速度。聚集索引和非聚集索引的區別,如字典預設按字母順序排列,讀者如知道某個字的讀音可根據字母順序快速定位。因此聚集索引和表的內容是在一起的。如讀者需要查詢某個生僻詞,則需按字典前面的索引,舉例按偏旁進行定位,找到該字對應的頁數,再開啟對應頁數找到該字。這種通過兩個地方而查詢到某個字的方式就如非聚集索引。

索引優點:

1、在設計資料庫時,通過建立乙個唯一的索引,能夠在索引和資訊之間形成一對一的對映式的對應關係,增加資料的唯一性特點。

2、能提高資料的搜尋及檢索速度,符合資料庫建立的初衷。

4、在資訊檢索過程中,若使用分組及排序子句進行時,通過建立索引能有效的減少搜尋過程中所需分組及排序時間,提高檢索效率。

5、建立索引之後,在資訊查詢過程中可以使用優化隱藏器,對於這個提高整個資訊檢索系統的效能具有重要意義。

缺點:1、在資料庫建立過程中,需要花費較多的時間去建立並維護索引,特別是隨著資料量的增加,所花費的時間將不斷遞增。

2、在資料庫中建立的索引需要占用一定的物理儲存空間,這其中就包括資料表所佔得資料空間以及所建立的每乙個索引所占用的物理空間,如果有必要建立起局聚簇索引,所占用的空間還將進一步增加。

3、在對錶中的資料進行修改時,例如對其進行增加、刪除或者修改操作時,索引都需要進行動態的維護,這給資料庫的維護速度帶來了一定的麻煩。

索引和表的關聯

首先,索引是樹的結構,預設從小到大排序。

每個表有乙個主鍵,mysql會以主鍵的值構造成一棵樹,葉節點存放著該主鍵對應的整行資料。所以一張表在資料表結構上等價於一課以主鍵排好序的樹。

對於其他自己建的索引叫做輔助索引,輔助索引的葉節點存了兩樣東西,一是addtime,並且是排好序的,二是這個

addtime對應的主鍵的值。當有where條件,比如where addtime = 『今天』,mysql直接從addtime索引,先找到符合條件的addtime,再從葉子結點中取出主鍵,跑去主鍵的那棵樹,取回整行資料。對區分高的字段加索引,有些像status,type,可能就只有0,1,2沒幾個值得意義不大。

索引組合:比如key(userid,addtime)就是葉子結點儲存userid和addtime的配對,加上對應的主鍵。順序是自己指定的順序,先排userid,userid相同 的再排addtime。

如果查詢條件有多個字段,有部分建立索引的。

如 a = 1 and b = 2 and c = 3,a和b分別有單獨的索引。mysql會看看到底是按a取得少還是按b取得少,如果a取得少,先把滿足a=1的資料拿出來,這時候拿出了部分資料,b的索引就不用了,因為一次查詢同一張表只能用一條索引。如果確實有多個索引的話,可以強制指定使用某個索引 select * from *** force index (ix_addtime);

對於join查詢,select **** from t1 join t2 on t1.id = t2.id

mysql 先比較t1,t2哪個錶小,假設t1小,這裡主要指行數少,然後把t1裡的id 全部取出來,這步是全表掃瞄,然後到t2裡去根據這些id乙個個查,所以這裡優化的關鍵是t2的id要加索引。小表因為要全表掃瞄,所以加了索引也是白家。小表決定迴圈的次數,大表決定每次迴圈的時間。如果小表有查詢條件,先把小表符合條件的資料過濾出來,再根據id到大表查資料。總結

資料庫索引雜談1

聚集索引結構 在sql server中,索引是按b 樹結構來進行組織的。聚集索引的資料排列順序與資料的物理排列順 序相同。聚集索引和非聚集索引的根本區別是表記錄的排列順序和與索引的排列順序是否一致.聚集索引表記錄的排列順序與索引的排列順序一致,優點是查詢速度快,因為一旦具有第乙個索引值的紀錄被找到,...

資料庫索引漫談(整理)1

不良的 sql往往來自於不恰當的索引 設計 不充份的 連 接條件和不可 優 化的 where 子句。在 對 它們進 行適當的 優 化後,其執行速度有了明 顯 地提高!下面我將從 這 三個方面分 別進 行 總結 一 不合理的索引 設計 例 表record 有 620000 行,試 看在不同的索引下,下...

1 MySQL資料庫索引

索引 index 幫助mysql高效獲取資料的資料結構 有序 最常見的採用得b 樹 平衡搜尋樹 儲存索引。索引的優勢 提高資料檢索的效率,降低資料庫的io成本。通過索引列對資料進行排序,降低資料排序的成本,降低cpu的消耗。索引的劣勢 索引也占用一定的記憶體空間。雖然索引提高了查詢效率,同時卻也降低...