索引的概念: 索引是一個分散存儲的數據結構(檢索)對資料庫表中一列或多列的值進行排序 為什麼要用索引? 聚集索引: 資料庫表行中數據的物理順序與鍵值的邏輯(索引)順序相同 輔助索引末尾指向主鍵索引,然後通過主鍵索引找值 如果innodb沒有建索引,預設會創建一個隱式主鍵索引 6bit 只要是索引是連 ...
索引的概念:
索引是一個分散存儲的數據結構(檢索)對資料庫表中一列或多列的值進行排序
為什麼要用索引?
- 索引能極大的減少存儲引擎需要掃描的數據量
- 索引可以把隨機IO變成順序IO
- 索引可以幫助我們進行分組,排序操作時,避免使用臨時表
聚集索引:
資料庫表行中數據的物理順序與鍵值的邏輯(索引)順序相同
輔助索引末尾指向主鍵索引,然後通過主鍵索引找值
如果innodb沒有建索引,預設會創建一個隱式主鍵索引 6bit
只要是索引是連續的,那麼數據在存儲介質上的存儲位置也是連續的
聯合索引
例如創建的索引是 [name,phone]
- 經常用的列優先 [最左匹配原則]
- 選擇性高的優先 [離散度高原則 ]
- 寬度小的列優先 [最少空間原則]
列的離散型:
count(distinct column):count(column)
比例越大離散性越好,離散性越好選擇性越好
最左匹配原則:
對索引中關鍵字進行計算,一定是從左往右一次進行,且不可跳過
覆蓋索引:
如果查詢列克通過索引節點中的關鍵字直接返回,可減少資料庫IO,將隨機IO變為順 序IO,提高查詢
索引的規範:
- 索引列的數據長度能少則少。
- 索引一定不是越多越好,越全越好,一定建合適的,欄位不要太大, 比如phoneNum是11位即可
- 建索引,不允許該欄位為空
- 匹配到首碼可用到索引Like 999%
- Where條件中Not in和 <>無法使用索引
- 匹配範圍值,order by 也可以用到索引
- 多用指定列查詢,只返回自己想要的數據列,少用select *