實戰mysql MYSQL實戰

2021-10-17 19:32:22 字數 1579 閱讀 4466

基礎架構

更新操作

日誌模組

redo log 和 binlog

兩階段提交: prepare commit

事務隔離

讀未提交:別人改資料的事務尚未提交,我在我的事務中也能讀到。

讀已提交:別人改資料的事務已經提交,我在我的事務中才能讀到。

可重複讀:別人改資料的事務已經提交,我在我的事務中也不去讀。

序列:我的事務尚未提交,別人就別想改資料。

這4種隔離級別,並行效能依次降低,安全性依次提高。

索引有乙個主鍵列為id的表,表中有字段k,並且在k上有索引。

主鍵索引的葉子節點存的是整行資料。在innodb裡,主鍵索引也被稱為聚簇索引(clustered index)。

非主鍵索引的葉子節點內容是主鍵的值。在innodb裡,非主鍵索引也被稱為二級索引(secondary index)。

如果語句是select * from t where id=500,即主鍵查詢方式,則只需要搜尋id這棵b+樹;

如果語句是select * from t where k=5,即普通索引查詢方式,則需要先搜尋k索引樹,得到id的值為500,再到id索引樹搜尋一次。這個過程稱為回表。

1、覆蓋索引:如果查詢條件使用的是普通索引(或是聯合索引的最左原則字段),查詢結果是聯合索引的字段或是主鍵,不用回表操作,直接返回結果,減少io磁碟讀寫讀取正行資料

2、最左字首:聯合索引的最左 n 個字段,也可以是字串索引的最左 m 個字元3、聯合索引:根據建立聯合索引的順序,以最左原則進行where檢索,比如(age,name)以age=1 或 age= 1 and name=『張三』可以使用索引,單以name=『張三』 不會使用索引,考慮到儲存空間的問題,還請根據業務需求,將查詢頻繁的資料進行靠左建立索引。4、索引下推:like 'hello%』and age >10 檢索,mysql5.6版本之前,會對匹配的資料進行回表查詢。5.6版本後,會先過濾掉age<10的資料,再進行回表查詢,減少回表率,提公升檢索速度

資料庫鎖

全域性鎖表鎖

行鎖策略:

一種策略是,直接進入等待,直到超時。這個超時時間可以通過引數innodb_lock_wait_timeout來設定。

另一種策略是,發起死鎖檢測,發現死鎖後,主動回滾死鎖鏈條中的某乙個事務,讓其他事務得以繼續執行。將引數innodb_deadlock_detect設定為on,表示開啟這個邏輯。

索引對索引欄位做函式操作,可能會破壞索引值的有序性,因此優化器就決定放棄走樹搜尋功能。

間隙鎖在可重複讀隔離級別下才有效,解決幻讀

mysql主備

在決定哪個表做驅動表的時候,應該是兩個表按照各自的條件過濾,過濾完成之後,計算參與join的各個欄位的總資料量,資料量小的那個表,就是「小表」,應該作為驅動表。

Python實戰之pymysql模組實戰

安裝 pip3 install pymysql author burgess zheng usr bin env python coding utf 8 import pymysql 建立連線 conn pymysql.connect host 10.0.0.150 port 3306,user p...

frida 實戰 Frida脫殼實戰記錄

只能祭出傳聞已久的frida,果然瞬間脫殼獲取了幾個dex檔案,一番搜尋收集了很多個介面和後端服務的真實ip。腦瓜不好用,抓緊記錄一下。用到的工具 adb connect 127.0.0.1 6555 adb shell adb forward tcp 27042 tcp 27042 adb for...

大資料實戰 Hive 技巧實戰

select address from test where dt 20210218 union all select address from test where dt 20210218 address m a m a m b m b m b m b select address from te...