這篇文章寫的比較雜,沒有去詳細的寫哪一個點,只是把經常使用的一些東西寫出來mysql
先說一下隔離級別,Sql Server , Oracl等 大多數數據庫的默認級別就是Read committed,當初我也記得mysql的隔離級別是讀已提交,後來查了一下,沒想到的是默認Repeatable read 重複讀。sql
接下來講索引,mysql支持兩種類型的索引 hash和BTree數據庫
hash類型的索引:查詢單條快,範圍查詢慢
btree類型的索引:b+樹,層數越多,數據量指數級增加oracle
不一樣的存儲引擎支持的索引類型也不同,mysql默認儲存引擎是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.先運行看看是否真的很慢,注意設置SQL_NO_CACHE
2.where條件單表查,鎖定最小返回記錄表。這句話的意思是把查詢語句的where都應用到表中返回的記錄數最小的表開始查起,單表每一個字段分別查詢,看哪一個字段的區分度最高
3.explain查看執行計劃,是否與1預期一致(從鎖定記錄較少的表開始查詢)
4.order by limit 形式的sql語句讓排序的表優先查
5.瞭解業務方使用場景
6.加索引時參照建索引的幾大原則
7.觀察結果,不符合預期繼續從0分析.net