一、爲何索引遵循最左匹配原則?mysql
當B+樹的數據項是符合的數據結構,好比(name,age,sex)的時候,B+樹是按照從左到右的順序創建搜索樹的。好比當(張三,20,F)這樣的數據來檢索的時候,b+樹會優先比較name來肯定下一步的所搜方向,若是name相同再依次比較age和sex,最後獲得檢索的數據;但當(20,F)這樣的沒有name的數據來的時候,B+樹就不知道下一步該查哪一個節點,由於創建搜索樹的時候name就是第一個比較因子,必需要先根據name來搜索才能知道下一步去哪裏 查詢。好比當(張三,F)這樣的數據來檢索時,B+樹能夠用name來指定搜索方向,但下一個字段age的缺失,因此 只能把名字等於張三的數據都找到,而後再匹配性別是F的數據了, 這個是很是重要的性質,即索引的最左匹配 特性。sql
二、主鍵索引 惟一索引 普通索引的區別?數據結構
主鍵是一種約束,索引是一種特殊的文件
,二者在本質上是不一樣的。oracle
索引
是一種特殊的文件
,它們包含着對全部記錄的引用指針
。索引能夠極大地提升數據查詢速度(比如一本書的目錄)
,可是會下降插入刪除更新表的速度
,由於在執行這些操做是,還要操做索引文件用來維護
,因此說索引不是建的越多越好而是要建在合理的字段。spa
索引的遵循原則
:
一、最左側原則
,表的最左側的一列,每每數據不會發生改變,不影響其餘列的數據;
二、命名短小原則
,索引命名過長會使索引文件變大
,損耗內存
。指針
普通索引
:(由關鍵字KEY或INDEX定義的索引)的惟一任務是
加快對數據的訪問速度。普通索引容許被索引的數據列包含重複的值
。若是能肯定某個數據列將只包含彼此各不相同的值
,在爲這個數據列常建立索引時應該用就用關鍵字UNIQUE
把他定義成一個惟一索引
。也就是說,惟一索引能夠保證數據記錄的惟一性
。code
惟一索引
:不容許兩行具備相同的索引值。server
主鍵
:是一種特殊的惟一索引,一張表中只能定義一個主鍵索引
,一般有一列或列組合
,用於惟一標識一條記錄
,使用關鍵字PRIMARY KEY
來建立。爲表定義一個主鍵
將自動建立主鍵索引(聚簇索引)
。當在查詢中使用主鍵索引時,它還容許快速訪問數據
。索引
聯合索引
:能夠覆蓋多個數據列
,像INDEX(columnA, columnB)
索引,這就是聯合索引。內存
主鍵索引和惟一索引的區別:
(1) 對於主鍵
/unique constraint , oracle/sql server/mysql等都會自動創建惟一索引
;
(2) 主鍵不必定只包含一個字段
,因此在主鍵的其中一個字段
建惟一索引
仍是有必要的;
(3) 主鍵可做外鍵
,惟一索引不可;
(4) 主鍵不可爲空
,惟一索引可;
(5) 主鍵但是多個字段的組合
;
(6) 主鍵與惟一索引不一樣的是:
a.有not null
屬性;
b.每一個表只能有一個
。
(7) 主鍵索引必定是惟一索引, 惟一索引不是主鍵索引
(8) 主鍵能夠與外鍵 構成 參照完整性約束
, 防止數據不一致