数据库-索引
索引
索引是對數據庫表中一個或多個列(例如,employee 表的姓名 (name) 列)的值進行排序的結構,使用索引可快速訪問數據庫表中的特定信息。索引的一個主要目的就是加快檢索表中數據的方法,亦即能協助信息搜索者盡快的找到符合限制條件的記錄ID的輔助數據結構。從數據搜索實現的角度來看,索引也是另外一類文件/記錄,它包含著可以指示出相關數據記錄的各種記錄。其中,每一索引都有一個相對應的搜索碼,字符段的任意一個子集都能夠形成一個搜索碼。這樣,索引就相當于所有數據目錄項的一個集合,它能為既定的搜索碼值的所有數據目錄項提供定位所需的各種有效支持。
索引分為聚簇索引和非聚簇索引兩種,聚簇索引 是按照數據存放的物理位置為順序的,而非聚簇索引就不一樣了;聚簇索引能提高多行檢索的速度,而非聚簇索引對于單行的檢索很快。根據數據庫的功能,可以在數據庫中創建三種索引:唯一索引、主鍵索引和聚集索引。
唯一索引 唯一索引是不允許其中任何兩行具有相同索引值的索引。當現有數據中存在重復的鍵值時,大多數數據庫不允許將新創建的唯一索引與表一起保存。數據庫還可能防止添加將在表中創建重復鍵值的新數據。例如,如果在employee表中職員的姓(lname)上創建了唯一索引,則任何兩個員工都不能同姓。 主鍵索引 數據庫表經常有一列或多列組合,其值唯一標識表中的每一行。該列稱為表的主鍵。在數據庫關系圖中為表定義主鍵將自動創建主鍵索引,主鍵索引是唯一索引的特定類型。該索引要求主鍵中的每個值都唯一。當在查詢中使用主鍵索引時,它還允許對數據的快速訪問。 聚集索引在聚集索引中,表中行的物理順序與鍵值的邏輯(索引)順序相同。一個表只能包含一個聚集索引。如果某索引不是聚集索引,則表中行的物理順序與鍵值的邏輯順序不匹配。與非聚集索引相比,聚集索引通常提供更快的數據訪問速度。聚集索引和非聚集索引的區別,如字典默認按字母順序排序,讀者如知道某個字的讀音可根據字母順序快速定位。因此聚集索引和表的內容是在一起的。如讀者需查詢某個生僻字,則需按字典前面的索引,舉例按偏旁進行定位,找到該字對應的頁數,再打開對應頁數找到該字。這種通過兩個地方而查詢到某個字的方式就如非聚集索引。
具體使用場景:
1.?建立索引的目的就是幫助查詢,如果查尋用不到則索引就沒有必要建立。
2.?如果表是經常需要更新的也不適合做索引 。頻繁更新會導致索引也會頻繁更新,降低寫的效率。
3.?唯一性差的字段不適合創建索引。
4.?當給一個字段創建了索引的話,而這個字段要進行like模糊查詢的話,那么這個值左邊不可以有%,因為索引查詢是要從左到右的,你如果給它加上%后,左邊的值不是確定的話,它會找不到這個索引。所以在使用like模糊查詢的時候,值得左邊不可以有%。
5. order by ?不會使用索引
6. or?當前后2個字段都有索引時才可以索引出來 否則不可以。
7.?如果數據表過大(5w以上)則有些字段(字符型長度超過(40))不適合作為索引。查詢大量數據時,索引有效,但是慢
8.?不使用索引的原因:因為索引時會先過一遍索引在過一遍數據
9.?當數據多且字段值有相同的值得時候用普通索引。
10.?當字段多且字段值沒有重復的時候用唯一索引。
11.?當有多個字段名都經常被查詢的話用復合索引。
12.?普通索引不支持空值,唯一索引支持空值。
13.?若是表增刪改多而查詢較少的話,就不要創建索引了,因為如果你給一列創建了索引,那么對該列進行增刪改的時候,都會先訪問這一列的索引,若是增,則在這一列的索引內以新填入的這個字段名的值為名創建索引的子集,?若是改,則會把原來的刪掉,再添入一個以這個字段名的新值為名創建索引的子集,?若是刪,則會把索引中以這個字段為名的索引的子集刪掉。所以,會對增刪改的執行減緩速度,
14.?更新太頻繁地字段不適合創建索引。
15.?不會出現在where條件中的字段不該建立索引。
轉載于:https://www.cnblogs.com/fqfanqi/p/6986942.html
總結
- 上一篇: 自己做的一个固定大小对象内存池,效率大概
- 下一篇: 面向对象多态