1、索引可以加快資料庫的檢索速度
2、表經常進行insert/update/delete操作就不要建立索引了,換言之:索引會降低插入、刪除、修改等維護任務的速度;
3、索引需要佔物理和資料空間
4、盡量選擇區分度高的列作為索引,區分度的公式是 count(distinct col) / count(*)。表示欄位不重複的比率,比率越大我們掃瞄的記錄數就越少。
5、存在最左匹配原則
mysql支援hash索引和b+樹索引兩種。
1、b+樹索引:主流的還是使用b+樹索引比較多。
2、雜湊索引:
雜湊索引就是採用一定的雜湊演算法,把鍵值換算成新的雜湊值,檢索時不需要類似b+樹那樣從根節點到葉子節點逐級查詢,只需一次雜湊演算法即可立刻定位到相應的位置,速度非常快。本質上就是把鍵值換算成新的雜湊值,根據這個雜湊值來定位。
雜湊索引有好幾個侷限(根據他本質的原理可得):
聚集索引就是以主鍵建立的索引;非聚集索引就是以非主鍵建立的索引;
區別:1、聚集索引在葉子節點儲存的是表中的資料;
2、非聚集索引在葉子節點儲存的是主鍵和索引列;
3、使用非聚集索引查詢出資料時,拿到葉子上的主鍵再去查到想要查詢的資料。(拿到主鍵再查詢這個過程叫做回表)
因此非聚集索引也叫做二級索引。
最左匹配原則:
1)索引可以簡單如乙個列(a),也可以複雜如多個列(a, b, c, d),即聯合索引。
2)如果是聯合索引,那麼key也由多個列組成,同時,索引只能用於查詢key是否存在(相等),遇到範圍查詢(>、
3)因此,列的排列順序決定了可命中索引的列數。
例子:1)如有索引(a, b, c, d),查詢條件a = 1 and b = 2 and c > 3 and d = 4,則會在每個節點依次命中a、b、c,無法命中d。(很簡單:索引命中只能是相等的情況,不能是範圍匹配)
另外、=、in自動優化順序
不需要考慮=、in等的順序,mysql會自動優化這些條件的順序,以匹配盡可能多的索引列。
例子:
資料庫 資料庫索引
索引是儲存引擎用於快速找到記錄的一種資料結構。索引以檔案的形式儲存在磁碟中。索引可以包含乙個或多個列的值。儲存引擎查詢資料的時候,先在索引中找對應值,然後根據匹配的索引記錄找到對應的資料行。1.b tree索引 2.雜湊索引 myisam和innodb儲存引擎 只支援btree索引,也就是說預設使用...
資料庫mysql索引 資料庫 mysql索引
mysql 索引 mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度。打個比方,如果合理的設計且使用索引的mysql是一輛蘭博基尼的話,那麼沒有設計和使用索引的mysql就是乙個人力三輪車。索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可...
資料庫索引
索引 索引列唯一索引 主鍵索引 聚簇索引和非聚簇索引 如何建立索引 如何刪除索引 使用索引可快速訪問資料庫表中的特定資訊。索引是對資料庫表中一列或多列的值進行排序的一種結構,例如 employee 表的姓 lname 列。如果要按姓查詢特定職員,與必須搜尋表中的所有行相比,索引會幫助您更快地獲得該資...