索引
1. 索引是什麼?
索引(index)是幫助資料庫高效獲取資料的資料結構。舉個例子,有乙個資料庫表user。
假設現在要查詢name為lily的的人員,如果沒有索引,資料庫不得不查詢user表中的每一行並確定這一樣的name是否為lily。由於我們想要得到每乙個名字為lily的雇員資訊,在查詢到第乙個符合條件的行後,不能停止查詢,因為可能還有其他符合條件的行。所以,必須一行一行的查詢直到最後一行-這就意味資料庫不得不檢查上千行資料才能找到所以名字為lily的雇員。這就是所謂的全表掃瞄。為了加快搜尋速度,這裡就出現了索引。索引是對某個字段進行排序的一種方式。對錶中的某個字段建立索引會建立另一種資料結構,其中儲存著字段的值,每個值又指向與它相關的記錄。這種索引的資料結構是經過排序的,因而可以對其執行二分查詢。
對上個表的name欄位進行索引,就是在資料庫儲存空間上建立一塊專用的控制項,把user表的所有的name欄位的值拿出來放到這裡,並且對這些值進行按照字母順序排序,並且每個值都攜帶著這個name對應的行所在資料塊的位址。因為name是進過排序的,按照一定的資料結構儲存的,所以資料庫引擎在查詢的時候,比如說查詢name為lily,引擎就會計算,lily大概在整個排序結構的大致地方,然後到那裡去拿出這個值看看是不是,不是的話就再次相應的向左或者向右移動去尋找。(這裡用到的知識都是大學時候的資料結構的知識,二分法查詢,相對於毫無頭緒的乙個乙個的查詢,二分法的查詢速度明顯的提高,達到了log2 n。)
2. 索引優點缺點?使用原則?
優點:大大提高了查詢速度
缺點:第一,建立索引和維護索引要耗費時間,這種時間隨著資料量的增加而增加。
第二,索引需要佔物理空間,除了資料表佔資料空間之外,每乙個索引還要佔一定的物理空間,如果要建立聚簇索引,那麼需要的空間就會更大。
第三,當對表中的資料進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了資料的維護速度。
使用原則:
通過上面說的優點和缺點,我們應該可以知道,並不是每個字段度設定索引就好,也不是索引越多越好,而是需要自己合理的使用。
1、對經常更新的表就避免對其進行過多的索引,對經常用於查詢的字段應該建立索引,
2、資料量小的表最好不要使用索引,因為由於資料較少,可能查詢全部資料花費的時間比遍歷索引的時間還要短,索引就可能不會產生優化效果。
3、在一同值少的列上(欄位上)不要建立索引,比如在學生表的"性別"欄位上只有男,女兩個不同值。相反的,在乙個欄位上不同值較多可是建立索引。
3. 什麼時候使用索引?
當使用的sql語句中有where子語句時,比如select * from user where name= lily;資料庫會檢查在查詢的列上是否有索引。假設name列上確實建立了索引,資料庫會接著檢查使用這個索引做查詢是否合理 - 因為有些場景下,使用索引比起全表掃瞄會更加低效。
資料庫索引的優點和缺點
為什麼要建立索引呢?這是因為,建立索引可以大大提高系統的效能。第一,通過建立唯一性索引,可以保證資料庫表中每一行資料的唯一性。第二,可以大大加快 資料的檢索速度,這也是建立索引的最主要的原因。第三,可以加速表和表之間的連線,特別是在實現資料的參考完整性方面特別有意義。第四,在使用分組和排序 子句進行...
資料庫索引的優點與缺點
索引是對資料庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問資料庫表中的特定資訊。資料庫索引 什麼是索引 資料庫索引好比是一本書前面的目錄,能加快資料庫的查詢速度。例如這樣乙個查詢 select from table1 where id 44 如果沒有索引,必須遍歷整個表,直到 id等於 ...
資料庫 索引的優點和缺點
索引就像是書的目錄,是與表或檢視關聯的磁碟上結構,可以加快從表或檢視中檢索行的速度。索引中包含由表或檢視中的一列或多列生成的鍵。這些鍵儲存在乙個結構 btree 中,使sql可以快速有效地查詢與鍵值關聯的行。建立索引的列可以保證行的唯一性,生成唯一的rowid 建立索引可以有效縮短資料的檢索時間 建...