Mysql高階高階(sql優化)

2021-10-09 05:06:55 字數 2872 閱讀 4998

目錄

一: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 命令的效果是一樣的 檢視連線數,...