最近剛剛朋友聊過這個問題,這裡簡單整理一下。
標題中的「『對於非常小的表,大部分情況下簡單的全表掃瞄比建立索引更高效』」,其實是問題「『索引的使用條件』」的答案的一部分。完整答案是:
mysql的預設儲存引擎是innodb,在innodb中索引是通過 b+ 樹實現的,mysql的資料是儲存在聚簇索引(聚簇索引也叫主鍵索引、一級索引)的葉子節點上。
在輔助索引(包括唯一索引和非唯一索引)的的葉子節點上儲存著構成索引的字段和主鍵。
如果查詢的字段不是索引的組成部分,就需要拿著從輔助索引中查到的主鍵值去聚簇索引中查詢資料,這個過程也叫做回表。
所以,如果乙個表比較小,那麼顯然直接遍歷錶比走索引要快(因為需要回表)。
❝這裡有乙個概念這裡簡單總結一下:「注:首先,要注意這個答案隱含的條件是查詢的資料不是索引的構成部分,否也不需要回表操作。其次,查詢條件也不是主鍵,否則可以直接從聚簇索引中拿到資料。」
❞
「b+tree 索引」
是大多數 mysql 儲存引擎的預設索引型別。
因為不再需要進行全表掃瞄,只需要對樹進行搜尋即可,所以查詢速度快很多。
因為 b+ tree 的有序性,所以除了用於查詢,還可以用於排序和分組。
可以指定多個列作為索引列,多個索引列共同組成鍵。
適用於全鍵值、鍵值範圍和鍵字首查詢,其中鍵字首查詢只適用於最左字首查詢。如果不是按照索引列的順序進行查詢,則無法使用索引。
innodb 的 b+tree 索引分為主索引和輔助索引。主索引的葉子節點 data 域記錄著完整的資料記錄,這種索引方式被稱為聚簇索引。因為無法把資料行存放在兩個不同的地方,所以乙個表只能有乙個聚簇索引。
輔助索引的葉子節點的 data 域記錄著主鍵的值,因此在使用輔助索引進行查詢時,需要先查找到主鍵值,然後再到主索引中進行查詢。
「覆蓋索引」
索引包含所有需要查詢的字段的值。
具有以下優點:
對於非常小的表、大部分情況下簡單的全表掃瞄比建立索引更高效;
對於中到大型的表,索引就非常有效;
外來鍵該不該有索引
參考 在資料庫中,索引的使用非常重要,恰當的使用索引可以提高資料庫訪問的效率,但是索引的不當使用則會影響效能並占用不必要的儲存空間。在oracle資料庫中,是否應該對外鍵使用索引呢?這可能是很多人都有的疑問,答案是肯定的,即在一般情況下應該對外鍵使用索引。不過在弄清這個問題之前首先要明確乙個概念,就...
到底該不該上馬Vista 中小企業公升級全攻略 上
cnet科技資訊網2月26日國際報道 微軟最新的作業系統windows vista在幾個月前已推出了企業版。市面上出現了很多討論 對於這個新的作業系統,有讚賞也有批評 許多中小型企業的it主管不知道是不是應該現在馬上,或在將來公升級到vista,還是永遠不該公升級。在本文中我們會談論vista可能帶...
年度調薪一般漲多少 中小企業該不該有明確的調薪制度
文丨任康磊 有朋友問 我是一名剛剛晉公升的中小企業hrm,公司是年輕的團隊,員工常常會主動向公司管理提出要求,比如希望有清晰的調薪制度,能明確調薪幅度與標準。據我了解很多企業確實會有明確的調薪制度,包括調整時間 具體漲幅比例與要求等,然而我公司調薪比較個性化,主要由各部門負責人申報,並無具體標準。同...