一、索引是什麼
mysql官方對索引的定義是:索引(index) 是幫助mysql高效獲取資料的資料結構。
即:索引是資料結構。
資料本身之外,資料庫還維護著乙個滿足特地查詢演算法的資料結構,這些資料結構以某種方式指向資料,這樣就可以在這些資料結的基礎上實現高階查詢演算法,這種資料結構就是索引。
一般來說索引本身也很大,不可能全部儲存在記憶體中,因此索引往往以索引檔案的形式儲存在磁碟上,我們平常所說的索引,若無特別指出,都是指b樹(多路搜尋樹,並不一定是二叉的)結構組織的索引。其中聚焦索引,次要索引,覆蓋索引,復合索引,字首索引,唯一索引預設都是使用b+樹索引,當然除了b+樹這種型別的索引之外,還有雜湊索引(hash index)等。
二、優勢和劣勢
優勢:1. 類似大學圖書館建書目索引,提高資料檢索的效率,降低資料庫的io成本。
2. 通過索引列對資料進行排序,降低資料排序的成本,降低cpu的消耗。
劣勢:1、索引列需佔空間。
2、會降低更新表的速度。
3、需對大資料量的表進行索引優化。
三、索引分類
1、單值索引(簡單索引):即乙個索引只包含單個列,乙個表中可以有多個單列索引。
方式一:
alter table 'table_name' add index index_name('column')
方式二:create index index_name on table_name('column')
2、唯一索引:索引列的值必須唯一,但允許有空值。
方式一:alter table 'table_name' add unique index `index_name`(column)
方式二:create unique index 索引名稱 on 表名稱(列名稱)
3、復合索引:即乙個索引包含多個列
alter table `table_name` add index index_name ( `column1`, `column2`, `column3` )
create unique index index_name on `table_name`(`column1`,`column2`)
4、檢視和刪除索引:
四、哪些情況需要建立索引
五、哪些情況不需要建立索引
六、常見瓶頸
cpu :cpu在飽和的時候一般發生在資料裝入記憶體或從磁碟上讀取資料的時候。
io :磁碟io瓶頸發生在裝入資料遠大於記憶體容量的時候。
伺服器硬體的效能瓶頸:top,free,iostart和vmstat來看系統效能狀態。
the end
mysql高階索引 Mysql高階 索引優化全解
是否會使用索引,是mysql的關鍵 1.sql效能下降原因查詢語句寫的不好,連線子查詢太多,沒有建索引等等 索引失效 關聯jion表過多 伺服器引數設定不合適2.索引優化 索引是什麼?索引就是一種排好序的查詢資料結構,常見模型有雜湊表 有序陣列 二叉搜尋樹 目前最常用的innodb引擎使用的模型是b...
mysql高階 索引優化分析
2 效能分析 explain 3 索引優化 筆記於學習尚矽谷課程所作 慢查詢的開啟並捕獲 explain 慢sql分析 showprofile查詢sql在mysq1伺服器裡面的執行細節和生命週期情況 sql資料庫伺服器的引數調優。mysql官方對索引的定義為 索引 index 是幫助mysql高效獲...
MySQL高階 索引優化案例1
1 員工表的建表語句 create table emps id int primary key auto increment,name varchar 20 not null default comment 姓名 age int not null default 0 comment 年齡 pos v...