目錄
一:mysql高階有哪些東西?
1、mysql的架構
2、索引優化分析
3、查詢擷取分析
4、mysql鎖機制
5、主從複製
架構這裡我們主要說的是引擎:
看你的mysql現在已提供什麼儲存引擎:
#看你的mysql當前預設的儲存引擎:
show variables like '%storage_engine%';
各個儲存引擎的介紹:
1、innodb儲存引擎
innodb是mysql的預設事務型引擎,它被設計用來處理大量的短期(short-lived)事務。除非有非常特別的原因需要使用其他的儲存引擎,否則應該優先考慮innodb引擎。行級鎖,適合高併發情況
2、myisam儲存引擎
myisam提供了大量的特性,包括全文索引、壓縮、空間函式(gis)等,但myisam不支援事務和行級鎖(myisam改表時會將整個表全鎖住),有乙個毫無疑問的缺陷就是崩潰後無法安全恢復。
3、archive引擎
archive儲存引擎只支援insert和select操作,在mysql5.1之前不支援索引。
archive表適合日誌和資料採集類應用。適合低訪問量大資料等情況。
根據英文的測試結論來看,archive錶比myisam表要小大約75%,比支援事務處理的innodb錶小大約83%。
4、blackhole引擎
blackhole引擎沒有實現任何儲存機制,它會丟棄所有插入的資料,不做任何儲存。但伺服器會記錄blackhole表的日誌,所以可以用於複製資料到備庫,或者簡單地記錄到日誌。但這種應用方式會碰到很多問題,因此並不推薦。
5、csv引擎
csv引擎可以將普通的csv檔案作為mysql的表來處理,但不支援索引。
csv引擎可以作為一種資料交換的機制,非常有用。
csv儲存的資料直接可以在作業系統裡,用文字編輯器,或者excel讀取。
6、memory引擎
如果需要快速地訪問資料,並且這些資料不會被修改,重啟以後丟失也沒有關係,那麼使用memory表是非常有用。memory表至少比myisam表要快乙個數量級。(使用專業的記憶體資料庫更快,如redis)
7、federated引擎
federated引擎是訪問其他mysql伺服器的乙個**,儘管該引擎看起來提供了一種很好的跨伺服器的靈活性,但也經常帶來問題,因此預設是禁用的。
myisam 與 innodb的比較
查詢資料太多,關聯太多的表,太多的jion
沒有利用索引(單值,復合)
伺服器調優及各個引數設定(緩衝,執行緒數等)
sql的執行順序:
手寫順序
機讀順序(可以看出機讀順序是從from開始的)
總結
七種jion
對應的sql
1 a、b兩表共有
select * from t_emp a inner join t_dept b on a.deptid = b.id;
2 a、b兩表共有+a的獨有
select * from t_emp a left join t_dept b on a.deptid = b.id;
3 a、b兩表共有+b的獨有
select * from t_emp a right join t_dept b on a.deptid = b.id;
4 a的獨有
select * from t_emp a left join t_dept b on a.deptid = b.id where b.id is null;
5 b的獨有
select * from t_emp a right join t_dept b on a.deptid = b.id where a.deptid is null;
6 ab全有
#mysql full join的實現 因為mysql不支援full join,下面是替代方法
#left join + union(可去除重複資料)+ right join
select * from t_emp a left join t_dept b on a.deptid = b.id
union
select * from t_emp a right join t_dept b on a.deptid = b.id
這裡因為要聯合的緣故,不能考慮到小表驅動大表的情況。只能用right join。要保證查詢出來的數字要一致。
7 a的獨有+b的獨有
* from t_emp a left join t_dept b on a.deptid = b.id where b.`id` is null
union
select * from t_emp a right join t_dept b on a.deptid = b.id where a.`deptid` is null;
如何檢視我們的sql效能:
explain + sql語句
explain具體的引數看explain的引數的含義
mysql高階索引 Mysql高階 索引優化全解
是否會使用索引,是mysql的關鍵 1.sql效能下降原因查詢語句寫的不好,連線子查詢太多,沒有建索引等等 索引失效 關聯jion表過多 伺服器引數設定不合適2.索引優化 索引是什麼?索引就是一種排好序的查詢資料結構,常見模型有雜湊表 有序陣列 二叉搜尋樹 目前最常用的innodb引擎使用的模型是b...
高階sql優化詳解
1.使用truncate代替delete oracle執行delete後會將被刪除的資料存放到undo表空間以便恢復,如果之後使用者使用rollback而不是commit,則oracle會利用undo表空間中的資料進行恢復。而是用truncate時,oracle不會將被刪除的資料放入undo表空間,...
mysql語句高階 Mysql高階SQL語句
show columns from table name from database name 或show columns from database name.table name 或show fields 解釋 顯示表中列名稱 和 desc table name 命令的效果是一樣的 檢視連線數,...