什麼是索引 1. 幫助Mysql高效獲取數據的數據結構 2. 索引就是數據結構 3. 類似新華字典的索引目錄,可以通過索引目錄快速查到你想要的字 4. 排好序的快速查找數據 為什麼要建立索引 1. 提高查詢效率 沒有排序之前一個一個往後找 通過索引進行排序之後,可以直接定義到想要的位置 2. 排好序 ...
什麼是索引
- 幫助Mysql高效獲取數據的數據結構
- 索引就是數據結構
- 類似新華字典的索引目錄,可以通過索引目錄快速查到你想要的字
- 排好序的快速查找數據
為什麼要建立索引
- 提高查詢效率 沒有排序之前一個一個往後找 通過索引進行排序之後,可以直接定義到想要的位置
- 排好序的快速查找數據結構-->就是索引
優勢
- 索引類似大學圖書館建立的書目索引,提高數據檢索的效率,降低資料庫的IO成本
- 通過索引對數據項進行排序,降低數據排序成本,降低了CPU的消耗
劣勢
- 一般來說, 索引本身也很大, 索引往往以文件的形式存儲到磁碟上
- 索引也是一張表,該表保存了主鍵與索引欄位,並指向實體表的記錄.所以索3引也是要占磁碟空間的
- 雖然索引提高了查詢速度,但是會降低更新表的速度.
- 因為更新表時, MYSQL不僅要保存數據,還要保存一下索引文件每次更新添加了索引列的欄位,
- 會調整因為更新所帶來的鍵值變化後索引的信息
索引分類
- 單值索引
一個索引只包含間個列,一個表可以有多個單值索引 一般來說, 一個表建立索引不要超過5個- 唯一索引 索引列的值必須唯一,但允許有空值
- 複合索引 一個索引包含多個列
- 全文索引
MySQL全文檢索是利用查詢關鍵字和查詢列內容之間的相關度進行檢索, 可以利用全文索引來提高匹配的速度。
索引為什麼能快速查找數據
- 二叉查找樹
- B-Tree
- B+Tree
基本語法
創建索引
create [UNIQUE] index 索引名稱 ON 表名(欄位(長度))
alter 表名 add [unque] index[索引名稱] on(欄位(長度))
查看索引
show index from 表名
刪除索引
drop index[索引名稱] on 表名
更改索引
添加一個主鍵,索引必須是唯一索引,不能為NULL
alter table tab_name add primary key(column_list)
創建的索引是唯一索引,可以為NULL
alter table tab_name add unque index_name(column_list)
普通索引,索引值可出現多次
alter table tab_name add index index_name(column_list)
全文索引
alter table tab_name add fulltext index_name(column_list)
索引建立選擇
適合建立索引
- 主鍵自動建立唯一索引
primary - 頻繁作為查詢條件的欄位應該創建索引
比如銀行系統銀行帳號,電信系統的手機號 - 查詢中與其它表關聯的欄位,外鍵關係建立索引
比如員工,部門外鍵 - 頻繁更新的欄位不適合建立索引
每次更新不單單更新數據,還要更新索引 - where條件里用不到的欄位不建立索引
查詢中排序的欄位,排序的欄位若通過索引去訪問將大提升排序速度
索引能夠提高檢索的速度和排序的速度
查詢中統計或分組的欄位
分組的前提是必排序