1、查詢語句是如何執行的?
1、連線
1、建立連線
2、驗證許可權,修改了許可權,建立新的連線才會生效。
3、sql執行的臨時記憶體
2、查詢快取
1、先查詢快取,更新操作會導致所有快取失效。
2、mysql 8.0功能去掉
3、分析
詞法解析,語法解析
4、優化
1、決定使用哪個索引,比方說根據統計資訊預估掃瞄行數,是否使用臨時表,需不需要排序等。
2、決定join的各個表的連線順序
5、執行
1、呼叫引擎介面,查詢到第一條符合條件的資料,然後依次查詢,返回結果。
更新是如何執行的?
1、日誌先行,redo log 和 undo log
2、binlog
3、兩階段提交
事務隔離&多版本控制
1、4種隔離級別
2、可重複讀的實現原理,一致性檢視
3、例子
注意:不帶索引的更新,會公升級為表鎖!
create table `t1` (
`id` int(11) unsigned not null auto_increment,
`city` varchar(16) not null,
`name` varchar(16) not null,
`age` int(11) not null,
`ext` varchar(10) not null default '',
primary key (`id`),
key `city` (`city`,`name`,`age`) using btree
) engine=innodb auto_increment=9001 default charset=utf8
事務1,更新了一條資料,where不帶索引。
start transaction with consistent snapshot;
update t1 set name = 'test2' where ext = 'test';
事務2,普通查詢可以,for update查詢被阻塞。
select * from t1 where id=4002;
select city,name,age from t1 where id=4002 for update;
4、讀提交和rr的區別
索引結構
1、b+樹
2、主鍵索引和普通索引的區別
排序原理
1、全欄位排序(sort_buffer,引數:sort_buffer_size)
2、rowid排序(引數:max_length_for_sort_data)
3、例子:
create table `t1` (
`id` int(11) not null,
`city` varchar(16) not null,
`name` varchar(16) not null,
`age` int(11) not null,
primary key (`id`),
key `city` (`city`)
) engine=innodb default charset=utf8
select city,name,age from t1 where city='北京' order by name limit 1000;
表中有4000條北京的資料,1000條上海的資料。
1、using filesort表示會使用排序。
2、通過以下語句檢視是否使用了檔案排序,檔案排序一般是歸併排序。
number_of_tmp_files,代表了使用了幾個臨時檔案。
3、轉rowid排序
使用rowid了排序,這個時候沒有使用檔案排序,使用臨時檔案個數為0;
4、增加覆蓋索引,就不會再排序了,因為索引預設是有順序的。
技術分享 MySQL 碎片問題
mysql 的碎片是 mysql 運維過程中比較常見的問題,碎片的存在十分影響資料庫的效能,本文將對 mysql 碎片進行一次講解。mysql 的碎片是否產生,通過檢視 show table status from table name g 這個命令中 data free 字段,如果該欄位不為 0,...
技術分享和技術部落格
上篇內容聊了一些技術社群相關的事情,本篇聊聊內外部技術分享 技術部落格相關的事情。提到技術分享,乙個繞不開的話題是為什麼要做技術分享?你可能會得到許多不同的略帶功利的答案,也可能會看到最樸素的 紮實自己技術的過程中幫助有相同需求的其他人。不論哪種動機,技術分享對於行業 公司 團隊 個人都是好的事情。...
Android技術分享
android開發必看知識,不看後悔 打包為大家奉上最實用最給力的資源,不看你絕對後悔。最強大的ui特效 奇藝高畫質ui 介面源 搜尋關鍵字飛入飛出效果 水波紋效果,附工程原始碼 效果很好很逼真 特效!超牛x launcher特效 仿360 一鍵優化動畫效果 功能強大的拼圖人生原始碼 最火爆的精品例...