即搜尋引導,索引是乙個特殊的資料結構,其儲存的關鍵資訊與詳細資訊的位置對應關係,加速索引
索引的影響:
正確使用索引才能加速查詢;
索引需要額外的占用資料空間;
索引的加入,使資料的crud變慢
索引的應用場景:
查詢操作較多,寫入較少;本質原理是盡可能減小搜尋範圍
領域:web開發,爬蟲,資料分析,資料探勘,人工智慧
零基礎到專案實戰,7天學習上手做專案
資料庫的資料最終儲存到了硬碟上,當一次io時,不光把當前磁碟位址的資料,而是把相鄰的資料也都讀取到記憶體緩衝區內,因為區域性預讀性原理告訴我們,當計算機訪問乙個位址的資料的時候,與其相鄰的資料也會很快被訪問到。每一次io讀取的資料我們稱之為一頁(page)
索引的目的:盡可能減低io次數,演算法支援:二分查詢法,應該盡可能的將資料量小的字段作為索引
b+樹 在b+樹中 葉子節點才是儲存真實資料的,葉子數量越多,樹的層級越高,導致io次數增加
要避免這個問題,在葉子節點中盡可能的儲存更多的資料,應該將資料量小的字段作為索引
當b+樹的資料項是復合的資料結構,b+樹會按照從左到右的順序來建立搜尋樹,也就是說根據sql語句由左至右順序寫入的搜尋字段,會優先搜尋最左邊的字段條件,再匹配下乙個字段條件,即索引的最左匹配特性.
聚集索引中包含了所有欄位的值,如果擬制定了主鍵,主鍵就是聚集索引;
如果沒有則找乙個非空且唯一的字段作為聚集索引;
如果也沒有這樣的列,innodb會在表內自動產生乙個聚集索引id,它是自增的
聚集索引中儲存了所有的資料
除了聚集索引之外的索引都稱之為輔助索引或第二索引,包括 foreign key 與 unique
輔助索引的特點:
其葉子節點儲存的是索引資料與所在行的主鍵值,innodb用這個 主鍵值來從聚集索引中搜查找資料
覆蓋索引指的是需要的資料僅在輔助索引中就能找到:
如果要查詢的資料在輔助索引中不存在,則需要回到聚集索引中查詢,這種現象稱之為回表
也就是說搜尋欄位為非索引欄位時,查詢搜尋字段資料時,先根據索引字段獲取主鍵值,在根據主鍵值搜尋查詢的字段.
#為表中某個字段新增索引
create index index_name on table_name(column);
# index_name表示索引名
# table_name表示表名
# column表示欄位名
#新增主鍵
alter table table_name add primary key(column);
使用占用空間最小的字段來作為索引;
盡量使用覆蓋查詢 ;
如果字段區分度低(重複度高),建立索引是沒有意義,反過來說應該將區分度高的字段作為索引
不要再等號的左邊做運算,例如:select count() from usr where id 3 = 6; 也會遍歷所有記錄
模糊匹配中,%盡量不要寫在前面
and語句中會自動找乙個具的字段優先執行,所以我們應該在and語句中至少包含乙個具備索引的字段
or語句要避免使用,如果要用則保證所有欄位都有索引才能加速
聯合索引中,順序應該將區分度最高的放到左邊,最低的放右邊
資料庫 資料庫索引
索引是儲存引擎用於快速找到記錄的一種資料結構。索引以檔案的形式儲存在磁碟中。索引可以包含乙個或多個列的值。儲存引擎查詢資料的時候,先在索引中找對應值,然後根據匹配的索引記錄找到對應的資料行。1.b tree索引 2.雜湊索引 myisam和innodb儲存引擎 只支援btree索引,也就是說預設使用...
資料庫mysql索引 資料庫 mysql索引
mysql 索引 mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度。打個比方,如果合理的設計且使用索引的mysql是一輛蘭博基尼的話,那麼沒有設計和使用索引的mysql就是乙個人力三輪車。索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可...
資料庫索引
索引 索引列唯一索引 主鍵索引 聚簇索引和非聚簇索引 如何建立索引 如何刪除索引 使用索引可快速訪問資料庫表中的特定資訊。索引是對資料庫表中一列或多列的值進行排序的一種結構,例如 employee 表的姓 lname 列。如果要按姓查詢特定職員,與必須搜尋表中的所有行相比,索引會幫助您更快地獲得該資...