設計表中:
索引種類:
1. Fulltext 全文本搜索索引:用於搜索長篇文章。
2. Unique 唯一索引:
-
主鍵索引:primary key :加速查找+約束(不爲空且唯一)
-
唯一索引:unique:加速查找+約束 (唯一)
3. 聯合索引:
-
-primary key(id,name):聯合主鍵索引
-
-unique(id,name):聯合唯一索引
-
-index(id,name):聯合普通索引
4. Normal 普通索引:加快搜索。
5. Spatial 空間索引。
索引功能:
1. 加快搜索;
2. mysql中的primary key,unique,聯合唯一也都是索引,這些索引除了加速查找以外,還有約束的功能
索引的兩大類型hash與btree:
-
#我們可以在創建上述索引的時候,爲其指定索引類型,分兩類
-
hash類型的索引:查詢單條快,範圍查詢慢
-
btree類型的索引:b+樹,層數越多,數據量指數級增長(我們就用它,因爲innodb默認支持它)
-
#不同的存儲引擎支持的索引類型也不一樣
-
InnoDB 支持事務,支持行級別鎖定,支持 B-tree、Full-text 等索引,不支持 Hash 索引;
-
MyISAM 不支持事務,支持表級別鎖定,支持 B-tree、Full-text 等索引,不支持 Hash 索引;
-
Memory 不支持事務,支持表級別鎖定,支持 B-tree、Hash 等索引,不支持 Full-text 索引;
-
NDB 支持事務,支持行級別鎖定,支持 Hash 索引,不支持 B-tree、Full-text 等索引;
-
Archive 不支持事務,支持表級別鎖定,不支持 B-tree、Hash、Full-text 等索引;
1)索引方法 btree 可以用於“ >、 < 、=”查詢 ,如果查id=1000的數據 建立索引後 二分查找最多13次就可以查出相應的數據;
2)hash 不能做order by排序 不能做 用like模糊查詢。
慢查詢優化的基本步驟:
0.先運行看看是否真的很慢,注意設置SQL_NO_CACHE
1.where條件單表查,鎖定最小返回記錄表。這句話的意思是把查詢語句的where都應用到表中返回的記錄數最小的表開始查起,單表每個字段分別查詢,看哪個字段的區分度最高
2.explain查看執行計劃,是否與1預期一致(從鎖定記錄較少的表開始查詢)
3.order by limit 形式的sql語句讓排序的表優先查
4.瞭解業務方使用場景
5.加索引時參照建索引的幾大原則
6.觀察結果,不符合預期繼續從0分析