目錄
1.分類
1.1 按語法
類別 | 語法 | 描述 |
普通索引 index | KEY `idx_pay_sp_order` (`F_sp_no`,`F_order_no`) | 最基本的索引類型,沒有唯一性之類的限制 |
唯一索引 unique | UNIQUE KEY `uk_trans_code` (`trans_code`) | 不允許其中任何兩行具有相同索引值的索引 |
主鍵索引 key | PRIMARY KEY (`F_id`) |
唯一,聚集順序 |
全文索引 | FULLTEXT KEY content_tag_fulltext(content,tag) | 適用於大量的文本數據 |
1.2 按物理存儲結構
類別 | 鍵 | 描述 |
---|---|---|
聚集索引 | 主鍵 |
一個表一個聚集索引。 數據和索引存放在同一文件中,以主鍵爲索引存儲數據 表中行的物理順序與鍵值的邏輯(索引)順序相同。 |
非聚集索引 | 普通字段 |
一個表多個非聚集索引 數據和索引分開單獨存放在不同的文件中,索引文件不存儲數據,而是存儲數據的地址或者主鍵 |
1.3 按數據結構
1.3.1 Btree索引
性質 | |
---|---|
多叉 |
階m:叉數的最大值 叉數限制:根節點最少可以有兩個分支[2,m]、非根非葉子的分支個數爲 [ ceil(m/2),m] key數:(分叉數-1),葉最多m-1個
|
key有序 |
搜索樹 節點內有序, 節點間 大於左子,小於右子 |
葉子-數據頁 |
聚集:所有數據均存儲在葉子節點,葉子包含所有key,葉子成一個鏈 非聚集:存儲地址或者主鍵key |
聚集索引
普通索引(二級)
1.3.2 Hash索引
類似內存中的HashMap
1.3 按字段數量
- 單一索引
- 組合索引
2. 設計索引
2.1 列選擇
原則 | 原因 | |
---|---|---|
key 小 |
由於越小,一個索引頁存放的key越多,索引樹越矮 遍歷快、佔用內存小 |
整型 < date,time < char,varchar < blob |
查詢頻繁的列 | 命中率高 |
where,<,<=,=,>,>=,between,in,like ‘xx%' group by,order by,on從句中出現的列 |
離散度大 | 離散度越大,key越多,樹能越長大 |
count distinct key 越大,離散程度越高 COUNT(DISTINCT colNm) / COUNT(*) |
2.2 設計規範
單個索引中每個索引記錄的長度不能超過64KB
單個表上的索引個數不能超過7個
分區表的分區字段(partition-key)必須有索引
3.命中索引
子句 | 使用限制 |
---|---|
where |
<,<=,=,>,>=,between,in 單個最左 like ‘xx%' 聯合-最左原則 index(a,b,c),where a |
group by | 最左 |
order by | 最左 |
join xx on | 最左 |
列 字符串 | 加上引號,隱式類型轉換,不會使用索引 |