mysql 全面知識點 Mysql知識點整理

2021-10-19 16:30:32 字數 4201 閱讀 8107

1、儲存引擎區別

myisam:不支援事物、僅支援表級鎖、支援b+樹索引

memory:不支援事物、僅支援表級鎖、支援b+樹和hash索引

innodb:支援事物、支援行級鎖、支援b+樹索引

2、鎖機制

myisam、memory儲存引擎使用的是表級鎖,分別為表共享讀鎖和表獨佔寫鎖,顯示加鎖lock table,

innodb儲存引擎即支援行級鎖也支援表級鎖,預設採用是行級鎖,分別為共享鎖和排他鎖,顯示加鎖用lock in share mode 顯式的加共享鎖,用 for update 顯式的加排他鎖,inonodb的儲存引擎在使用insert、delete、update操作使預設使用排他鎖,在使用select不會加任何的鎖

innodb鎖機制的重點在於行級鎖的實現方式是——索引加鎖

1、只有通過索引檢索資料時才會觸發行級鎖,否則使用表級鎖

2、即使是訪問不同行的資料,如果使用的相同的索引鍵,會發生鎖衝突

3、如果資料表建有多個索引時,可以通過不同的索引鎖定不同的行

select * from user where id > 100 for updata,例如顯示加排他鎖

區別:行級鎖: 開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖衝突的概率最低,併發度也最高。

表級鎖: 開銷小,加鎖快;不會出現死鎖(因為myisam會一次性獲得sql所需的全部鎖);鎖定粒度大,發生鎖衝突的概率最高,併發度最低。

綜上:行級鎖使用在高併發環境下,對事物完整性要求較高的系統,而表級鎖適用於併發不高,以多查詢,少更新的系統

3、索引 innodb預設支援b+樹

mysql索引也稱為"鍵",索引優化是對查詢效能優化的最有效的手段了。索引的資料結構b+樹,索引的功能就是加速查詢功能

b+樹資料結構的性質

(1)、索引欄位要盡量小

(2)、索引的最左匹配原則,

mysql索引分類

(1)普通索引 index 加速查詢 (2)唯一索引 unique 唯一約束+加速查詢(3)主鍵唯一索引 primary key 不為空且唯一+加速查詢(4)聯合索引 (column1,column2)

注意索引無法命中情況

(1)『>』、『

『like『、『between『

『or』的條件中列沒有加索引不會走索引,

『!=』普通索引不走索引,主鍵索引走索引

(2)索引列使用函式

4、樂觀鎖:在更新金額或者狀態的時候包含原值資訊,這並不是資料的鎖,而是利用了資料比較抽象出來的鎖,例如:update xx set amount=$ where id=「$」 and amount=$

悲觀鎖:資料庫的行級鎖,因為行級鎖的顆粒度小,需要的系統開銷大,可能會出現死鎖的情況,所以稱為悲觀鎖。在操作dml(insert,update,delete)時oracle和mysql會自動加上行級鎖,顯式的for update也是加上行級鎖

redis分布式鎖:使用已有元件redisonebuone

select * from table for update 【of column】【nowait|wait 3】for update nowait 第二個執行遇鎖時直接拋異常 for update wait 5 第二個執行遇鎖時等待5s時間

注意:使用悲觀鎖時,如果是多表關聯查詢,例如:select * from t1,t2 where t1.id = t2.id and t1.age = 『20『 for update;就會把t1和t2兩個表中符合條件的行鎖定;此時,我們需要使用for update of column_name

例如:select * from t1,t2 where t1.id = t2.id and t1.age = 『20『 for update of t1.id;這樣就會只把t1表中的符合條件的行加鎖,t2表中符合條件的行不會加鎖。

5、根據設定資料庫不同的隔離級別,在不同的隔離級別下可能發生的不同問題

更新丟失、髒讀(update)、幻讀(insert)、不可重複讀

mysql 8 改變了之前的密碼驗證外掛程式,導致現在去連線的話,出現了錯誤 mysql 8.0 預設使用 caching_sha2_password 身份驗證機制 —— 從原來的 mysql_native_password 更改為 caching_sha2_password

alter user 『root『@『localhost『 identified by 『password『 password expire never; #修改加密規則

alter user 『root『@『localhost『 identified with mysql_native_password by 『password『; #更新一下使用者的密碼

flush privileges; #重新整理許可權

mysql多表關聯查詢命中索引的注意事項(sql優化)

1、on 關聯的字段必須要加索引(加快關聯查詢的速度)

2、explain關鍵字 顯示了mysql如何使用索引來處理select語句以及連線表。可以幫助選擇更好的索引和寫出更優化的查詢語句。

(1)selec_type:查詢型別,常見的值[******:簡單表,不使用表連線或子查詢。primary : 主查詢,外層的查詢。union 第二個或者後面的查詢語句。subquery : 子查詢中的第乙個select]

(2)table:輸出結果的表

(3)type:

3.1 type=all 全表掃瞄,

3.2 type=index 索引全掃瞄,遍歷整個索引來查詢匹配的行

3.3 type=range 索引範圍掃瞄,常見於 ,>=,between,in等操作符。

3.4 type=ref 使用非唯一索引或唯一索引的字首掃瞄,返回匹配某個單獨值的記錄行。ref還經常出現在join操作中

3.5 type=eq_ref 類似於ref,區別就在使用的索引是唯一索引,對於每個索引鍵值,表中有一條記錄匹配;簡單來說,說是多表連線中使用 主建或唯一健作為關聯條件

3.6 type=const/system 單錶中最多有乙個匹配行。主要用於比較primary key [主鍵索引]或者unique[唯一]索引,因為資料都是唯一的,所以效能最優。條件使用=。

3.7 type=null 不用訪問表或者索引,直接就能夠得到結果

(4)possible_keys:可能使用的索引

(5)key:實際使用的索引

(6)key_len:索引使用的位元組數

(7)ref:關聯過程中匹配使用到的列或常量

(8)rows:表示mysql根據表統計資訊及索引選用情況,估算的找到所需的記錄所需要讀取的行數

(9)extra:

using where:列資料是從僅僅使用了索引中的資訊而沒有讀取實際的行動的表返回的,這發生在對錶的全部的請求列都是同乙個索引的部分的時候,表示mysql伺服器將在儲存引擎檢索行後再進行過濾

using temporary:表示mysql需要使用臨時表來儲存結果集,常見於排序和分組查詢

using filesort:mysql中無法利用索引完成的排序操作稱為「檔案排序」

using join buffer:改值強調了在獲取連線條件時沒有使用索引,並且需要連線緩衝區來儲存中間結果。如果出現了這個值,那應該注意,根據查詢的具體情況可能需要新增索引來改進能。

impossible where:這個值強調了where語句會導致沒有符合條件的行。

select tables optimized away:這個值意味著僅通過使用索引,優化器可能僅從聚合函式結果中返回一行

3、無效索引:對於資料變化不大的列,如xx型別,不應該使用索引,因為insert、update、delete操作都需要更新序列,區分度不大,索引效果不明顯

4、運算子,!=不走索引,or兩邊的條件都需要是索引列否則也不走索引,如果出現or的乙個條件沒有索引時,建議使用 union

5、on後面跟查詢條件是先進行刪選再進行關聯得出查詢結果,on ...where 後面跟查詢條件是先通過on關聯出臨時表,再通過where後面的條件刪選出結果

mysql知識點整理

標籤:效能   index   不可重複讀   狀態   localhost   錯誤   共享鎖   服務   緩衝區

mysql常用知識點 mysql 常用知識點。

mysql u root p show databases show tables select from abc order by id limit 0,10 create database bbb exit mysqldump u root p game home backup.sql mysq...

二級mysql知識點 Mysql 知識點

1.死鎖回滾策略 死鎖發生時mysql會選擇行數少的事務進行回滾 2.鎖型別 共享鎖,排他鎖 行級鎖 innob record lock 鎖定單條記錄 gap lock 鎖定乙個範圍的記錄 但不包括記錄本身 next key lock 鎖定乙個範圍的記錄 並且包 含記錄本身 這是預設的鎖型別 更新操...

MySQL知識點 總結

1 truncate和delete trop之間有什麼區別?truncate table 在功能上與不帶 where 子句的 delete 語句相同 二者均刪除表中的全部行。但 truncate table 比 delete 速度快,且使用的系統和事務日誌資源少。delete 語句每次刪除一行,並在...