做響應(yīng)式網(wǎng)站兼容哪幾個尺寸百度云服務(wù)器官網(wǎng)
你對MySQL執(zhí)行計劃怎么看
執(zhí)行計劃就是SQL的執(zhí)行查詢的順序,以及如何使用索引查詢,返回的結(jié)果集的行數(shù)
在MySQL中,我們可以通過explain命令來查看執(zhí)行計劃。其語法如下:
EXPLAIN SELECT * FROM table_name WHERE conditions;
在執(zhí)行該命令后,MySQL將返回一張表格,用于展示查詢的執(zhí)行計劃。其中包括以下幾個重要字段:
- id:每個查詢都有一個唯一的id,用于標識這個查詢;
- select_type:表示查詢類型,主要分為簡單查詢、聯(lián)合查詢、子查詢等;
- table:表示查詢涉及到的表名;
- partitions:表示涉及到的分區(qū);
- type:表示表的訪問類型,包括ALL(全表掃描)、index(索引掃描)、range(索引范圍掃描)、ref(非唯一索引掃描)、eq_ref(唯一索引掃描)等;
- possible_keys:表示可用的索引;
- key:MySQL選擇使用的索引;
- key_len:表示索引字段長度;
- ref:表示索引被哪個字段或常量所引用;
- rows:表示MySQL根據(jù)表統(tǒng)計信息估算出的查詢結(jié)果集的行數(shù);
- filtered:表示通過條件過濾后的結(jié)果集占總結(jié)果集的百分比;
- Extra:包含MySQL執(zhí)行計劃中的其他信息,例如是否使用了臨時表、是否使用了文件排序等。
- 執(zhí)行效率:ALL<index<range<eq_ref<const<system
事務(wù)的基本特性和隔離級別
事務(wù)的基本特性ACID分別:原子性,一致性,隔離性,持久性。
原子性:指的是一個事務(wù)中的操作要么全部成功,要么全部失敗。
一致性:指的是數(shù)據(jù)庫總是從一個一致性的狀態(tài)轉(zhuǎn)換到另外一個一致性的狀態(tài)。
隔離性:指的是一個事務(wù)的修改在最總提交前,對其他事務(wù)是不可見的。
持久性:指的是一旦事務(wù)提交,所作的修改就會永久保存到數(shù)據(jù)庫中。
隔離級別
read uncommit 讀未提交,可能會讀到其他事務(wù)未提交的數(shù)據(jù),也叫臟讀
read commit 讀已提交,兩次讀取結(jié)果不一致,叫不可重復(fù)讀,解決臟讀問題,
repeatable read 可重復(fù)復(fù)讀,MySQL的默認級別,每次讀取結(jié)果都一樣,但可能產(chǎn)生幻讀
serializable 串行,一般不使用,會給每一行讀取的數(shù)據(jù)加鎖,導(dǎo)致大量超時和鎖競爭的問題
對慢查詢都有怎樣的優(yōu)化過
優(yōu)化首先要清楚慢的原因,查詢條件沒有命中索引,loadl不需要的數(shù)據(jù)列,數(shù)據(jù)量太大?
所以優(yōu)化也是針對這個三個方向來進行優(yōu)化的
首先分析語句,是否load了額外的數(shù)據(jù),可能時出現(xiàn)呢了多余的行并且拋棄掉了,可能是加載了許多不需要的列,對語句進行分析以及重寫
分析語句的執(zhí)行計劃,如何獲得使用索引的情況,之后修改語句或者修改索引,使得語句可以盡可能的命中索引
如果對語句的優(yōu)化無法進行,可以考慮表中的數(shù)據(jù)量是否太大,進行橫向或者縱向的分表
ACID靠什么保證的?
A原子性是由undo log日志保證,他記錄了需要回滾的日志信息,事務(wù)回滾時撤銷以及執(zhí)行成功的sql
C一致性是由其他三個特性保證,程序代碼要保證業(yè)務(wù)的上的一致性
I隔離性偶MVCC來保證
D持久性由內(nèi)存+redo log來保證,MySQL修改數(shù)據(jù)同時在內(nèi)存和redo log記錄這次操作,發(fā)生宕機可以從redo log恢復(fù)
InnoDB redo log寫盤,InnoDB事務(wù)進入prepare狀態(tài)。
如果prepare成功,binlog寫盤,再繼續(xù)將事務(wù)日志持久化到binlog,如果持久化成功,那么InnoDB事務(wù)則進入commit狀態(tài)(在redo log里面寫入一個commit記錄)redo log的刷盤會在系統(tǒng)空閑時進行