mysql基礎(chǔ)知識(shí)

MySQL客戶端與服務(wù)端的通信方式是“半雙工”

全雙工:雙向通信,發(fā)送同時(shí)也可以接收

半雙工:雙向通信,同時(shí)只能發(fā)送或者接收,無(wú)法同時(shí)操作

單工:?jiǎn)蜗蛲ㄐ?/i>

通信狀態(tài)查詢 show processlist

查詢緩存

工作原理:

緩存select操作的結(jié)果集合SQL語(yǔ)句

新的select語(yǔ)句,先去查詢緩存,判斷是否存在可用的記錄集

存儲(chǔ)引擎

1、Active存儲(chǔ)引擎(壓縮協(xié)議進(jìn)行數(shù)據(jù)的存儲(chǔ));

特點(diǎn):只支持insert和select兩種操作;只允許自增id列建立索引;行級(jí)鎖;不支持事務(wù);數(shù)據(jù)占用磁盤(pán)少

2、MyISAM;3、Innodb;4、Memory存儲(chǔ)引擎

一、MyIsam和innodb的對(duì)比

1、MyISAM不支持事務(wù),Innodb是事務(wù)型存儲(chǔ)引擎。

2、MyISAM只支持表級(jí)鎖,Innodb默認(rèn)支持行級(jí)鎖

3、MyISAM不支持外鍵,Innodb支持外鍵

4、MyISAM支持全文索引,Innodb不支持

5、MyISAM引擎的查詢、更新、插入的效率都比innodb高

總結(jié):在讀多少寫(xiě)的應(yīng)用中還是Innodb插入性能更穩(wěn)定,如果對(duì)比讀取速度要求比較快的選MyISAM

附加:

1、MyISAM屬于堆表,在磁盤(pán)上有三個(gè)文件 .frm,.MYI(存放索引),.MYD(存放數(shù)據(jù)),支持三種不同的存儲(chǔ)方式:靜態(tài)表、動(dòng)態(tài)表、壓縮表

2、Innodb屬于索引組織表,支持兩種存儲(chǔ)方式:共享表空間存儲(chǔ)和多表空間存儲(chǔ)。

3、關(guān)于自動(dòng)增長(zhǎng):MyISAM引擎的自動(dòng)增長(zhǎng)列必須是索引,如果是組合索引,自動(dòng)增長(zhǎng)列可以不是第一列;

Innodb引擎的自動(dòng)增長(zhǎng)列必須是索引,如果是組合索引,自動(dòng)增長(zhǎng)列必須是組合索引的第一列

4、關(guān)于主鍵:MyISAM可以沒(méi)有主鍵和自動(dòng)索引,MyISAM的索引都是保存行地址

? ? Innodb引擎如果沒(méi)有設(shè)置主鍵或者非空的唯一索引,就會(huì)自動(dòng)生成一個(gè)6個(gè)字節(jié)的主鍵(用戶不可見(jiàn))

5、關(guān)于count函數(shù),如果沒(méi)有where條件,MyISAM保存表的總行數(shù),直接取就行

Innodb需要遍歷整個(gè)表,如果有where條件,處理方式一樣

二、事務(wù)

1、事務(wù)的ACID屬性

原子性、隔離性、持久性、最終一致性

2、并發(fā)事務(wù)帶來(lái)的幾個(gè)問(wèn)題

更新丟失、臟讀、不可重復(fù)讀、幻讀

3、事務(wù)的隔離級(jí)別

讀未提交、讀已提交、可重復(fù)讀(默認(rèn))、序列化

三、鎖

共享鎖、排他鎖、意向共享鎖(表鎖)、意向排他鎖(表鎖)、間隙鎖、臨鍵鎖、記錄鎖、死鎖

1、mysql死鎖怎么避免?怎么解決?

避免死鎖

1.1、類似的業(yè)務(wù)邏輯以固定的順序訪問(wèn)表和行

1.2、大事務(wù)拆小

1.3、同一個(gè)事務(wù)中,盡可能一次鎖定鎖需要的所有資源

1.4、為表添加合理是索引,避免表鎖

MySQL有兩種死鎖處理方式:

等待,直到超時(shí)(innodb_lock_wait_timeout=50s)。

發(fā)起死鎖檢測(cè),主動(dòng)回滾一條事務(wù),讓其他事務(wù)繼續(xù)執(zhí)行(innodb_deadlock_detect=on)。

由于性能原因,一般都是使用死鎖檢測(cè)來(lái)進(jìn)行處理死鎖。

2、innodb 如果沒(méi)加索引,寫(xiě)操作會(huì)加表鎖;如果加了所有,只加行鎖和間隙鎖

3、死鎖的條件

3.1)互斥條件

3.2)不可搶占條件

3.3)循環(huán)等待條件

4、樂(lè)觀鎖和悲觀鎖

4.1)悲觀鎖:一鎖二查三更新,需要數(shù)據(jù)庫(kù)本身提供支持 select 。。。 for update來(lái)實(shí)現(xiàn)

4.2)樂(lè)觀鎖:一般是邏輯上實(shí)現(xiàn),不需要數(shù)據(jù)庫(kù)本身提供支持,一般的做法是在需要的數(shù)據(jù)上增加一個(gè)版本號(hào)或者時(shí)間戳。

四、索引

正確的創(chuàng)建合適的索引,是提升mysql數(shù)據(jù)查詢性能的基礎(chǔ)。

索引是為了加速對(duì)表中數(shù)據(jù)行的檢索而創(chuàng)建的一種分散的數(shù)據(jù)結(jié)構(gòu)。

1、種類:

主鍵索引:數(shù)據(jù)記錄里面不能有null,數(shù)據(jù)內(nèi)容不能重復(fù),在一張表里面不能有多個(gè)主鍵索引。

唯一索引:字段數(shù)據(jù)是唯一的

組合索引:多個(gè)列建立索引

普通索引:使用字段關(guān)鍵字建立的索引,主要是提高查詢速度

全文索引:只有MyISAM支持

2、結(jié)構(gòu):B+Tree索引、Hash索引、全文索引(只有MyISAM支持)、RTree

備注:hash索引:由于hash的唯一及類似鍵值對(duì)的形式很適合做索引,可以一次定位,但是對(duì)于范圍查詢、排序、組合索引,效率不高

3、索引的優(yōu)缺點(diǎn):

優(yōu)點(diǎn)

3.1、索引能極大的減少存儲(chǔ)引擎需要掃描的數(shù)據(jù)量

3.2、索引可以把隨機(jī)IO變?yōu)轫樞騃O

3.3、索引可以幫助我們?cè)诜纸M,排序等操作時(shí),避免使用臨時(shí)表

缺點(diǎn)

3.1)提高了查詢速度,但是降低了表的更新速度,因?yàn)楦卤淼臅r(shí)候,不僅要更新下數(shù)據(jù),還有更新下索引文件

3.2)建立索引文件會(huì)占用磁盤(pán)空間,一般情況不嚴(yán)重。但是在一個(gè)大表上建立多種組合索引,索引文件會(huì)增長(zhǎng)很快。

4、索引失效

4.1)如果條件中有or,即使其中有條件帶索引也不會(huì)使用,除非全都都是索引

4.2)對(duì)于組合索引,如果不滿足最左匹配原則,不使用索引

4.3)like查詢以%開(kāi)頭,不使用索引,如果離散度低,也不走索引

4.4)如果列是字符串類型,那一定要在條件中將數(shù)據(jù)用引號(hào)引用起來(lái),否者不使用索引

4.5)查詢的數(shù)量是大表的大部分,應(yīng)該是30%以上

4.6)對(duì)索引列進(jìn)行運(yùn)算

4.7)mysql使用不等于,無(wú)法使用索引

4.8)mysql中使用is not null 或 is null。

五、基礎(chǔ)理論

1、三范式

1.1)建表時(shí)要保證列的原子性(不可分割)

1.2)數(shù)據(jù)庫(kù)表中的每個(gè)實(shí)例或記錄必須可以被唯一的區(qū)分

1.3)一個(gè)關(guān)系中不包含已在其他關(guān)系已包含的非關(guān)鍵字信息

2、drop、delete、truncate的區(qū)別和在什么場(chǎng)景下使用

2.1)drop

屬于DDL;不可回滾;不可帶where;刪除表結(jié)構(gòu)和內(nèi)容;刪除速度快

2.2)truncate

屬于DDL,不可回滾;不可帶where;刪除表內(nèi)容;刪除速度快

2.3)delete

屬于DML,可回滾;可帶where,刪除表內(nèi)容,刪除速度慢,需要逐行刪除

3、為什么選擇B+Tree作為索引結(jié)構(gòu)

3.1)B+樹(shù)掃庫(kù)、表能力更強(qiáng)

3.2)B+書(shū)的磁盤(pán)讀寫(xiě)能力更強(qiáng)

3.3)B+樹(shù)的排序能力更強(qiáng)

3.4)B+樹(shù)的查詢效率更穩(wěn)定

六、MVCC 多版本并發(fā)控制

避免寫(xiě)操作的阻塞,從而引發(fā)讀操作的并發(fā)問(wèn)題

1、mysql表中會(huì)默認(rèn)加兩列:數(shù)據(jù)行版本號(hào)、刪除版本號(hào);有個(gè)全局事務(wù)ID

2、查詢的規(guī)則

2.1、查詢數(shù)據(jù)行版本號(hào)早于當(dāng)前事務(wù)版本的數(shù)據(jù)行

2.2、查詢刪除行版本號(hào)要么為null,要么大于當(dāng)前事務(wù)版本號(hào)的記錄

七、undo Log 和redo Log

1、undo log:是為了實(shí)現(xiàn)事務(wù)的原子性而出現(xiàn)的產(chǎn)物

快照讀(普通的select就是快照讀)、當(dāng)前讀(SQL讀取的數(shù)據(jù)是最新版本,一般在修改數(shù)據(jù)的情況下)

2、redo log:是為了實(shí)現(xiàn)事務(wù)的持久性而產(chǎn)生的產(chǎn)物

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 抱著我的小烏龜,左翻翻右翻翻還是睡不著!
    水淼淼wo閱讀 127評(píng)論 0 0
  • 每當(dāng)我清醒的時(shí)候,我就會(huì)覺(jué)得我擁有了全世界、我好幸福、我終于可以吸一口新鮮的空氣了。哪怕我清楚地記得之前它是如此折...
    MissMay_閱讀 203評(píng)論 0 1
  • 各位家長(zhǎng)們,大家好!本班為臨海潮童星T臺(tái)11班,本班一共40課時(shí)/20次課,目前為止已上18課時(shí)/9次課。請(qǐng)假的寶...
    CTKIDSTAR蔡老師閱讀 879評(píng)論 0 0
  • 年底元旦三天小假期,去個(gè)千山萬(wàn)水的地太遠(yuǎn),推薦一個(gè)你家附近的休閑度假地給你參考。 其實(shí)就是家附近的——澡堂子,此澡...
    帶樂(lè)姐閱讀 495評(píng)論 0 0

友情鏈接更多精彩內(nèi)容