閱讀指南
1.事務(wù)四大特性
原子性,要么執(zhí)行,要么不執(zhí)行 隔離性,所有操作全部執(zhí)行完以前其它會(huì)話不能看到過(guò)程一致性,事務(wù)前后,數(shù)據(jù)總額一致持久性,一旦事務(wù)提交,對(duì)數(shù)據(jù)的改變就是永久的
2.數(shù)據(jù)庫(kù)隔離級(jí)別
臟讀:事務(wù)B讀取事務(wù)A還沒(méi)有提交的數(shù)據(jù)不可重復(fù)讀:兩次事務(wù)讀的數(shù)據(jù)不一致幻讀:事務(wù)A修改了數(shù)據(jù),事務(wù)B也修改了數(shù)據(jù),這時(shí)在事務(wù)A看來(lái),明明修改了數(shù)據(jù),咋不一樣
3.MYSQL的兩種存儲(chǔ)引擎區(qū)別(事務(wù)、鎖級(jí)別等等),各自的適用場(chǎng)景
引擎 | 特性 |
---|
MYISAM | 不支持外鍵,表鎖,插入數(shù)據(jù)時(shí),鎖定整個(gè)表,查表總行數(shù)時(shí),不需要全表掃描 |
INNODB | 支持外鍵,行鎖,查表總行數(shù)時(shí),全表掃描 |
4.索引有B+索引和hash索引
索引 | 區(qū)別 |
---|
Hash | hash索引,等值查詢效率高,不能排序,不能進(jìn)行范圍查詢 |
B+ | 數(shù)據(jù)有序,范圍查詢 |
5.聚集索引和非聚集索引
索引 | 區(qū)別 |
---|
聚集索引 | 數(shù)據(jù)按索引順序存儲(chǔ),中子結(jié)點(diǎn)存儲(chǔ)真實(shí)的物理數(shù)據(jù) |
非聚集索引 | 存儲(chǔ)指向真正數(shù)據(jù)行的指針 |
6.索引的優(yōu)缺點(diǎn),什么時(shí)候使用索引,什么時(shí)候不能使用索引
索引最大的好處是提高查詢速度,缺點(diǎn)是更新數(shù)據(jù)時(shí)效率低,因?yàn)橐瑫r(shí)更新索引對(duì)數(shù)據(jù)進(jìn)行頻繁查詢進(jìn)建立索引,如果要頻繁更改數(shù)據(jù)不建議使用索引。
7.InnoDB索引和MyISAM索引的區(qū)別
一是主索引的區(qū)別,InnoDB的數(shù)據(jù)文件本身就是索引文件。而MyISAM的索引和數(shù)據(jù)是分開(kāi)的。二是輔助索引的區(qū)別:InnoDB的輔助索引data域存儲(chǔ)相應(yīng)記錄主
8.索引的底層實(shí)現(xiàn)(B+樹(shù),為何不采用紅黑樹(shù),B樹(shù))重點(diǎn)
樹(shù) | 區(qū)別 |
---|
紅黑樹(shù) | 增加,刪除,紅黑樹(shù)會(huì)進(jìn)行頻繁的調(diào)整,來(lái)保證紅黑樹(shù)的性質(zhì),浪費(fèi)時(shí)間 |
B樹(shù)也就是B-樹(shù) | B樹(shù),查詢性能不穩(wěn)定,查詢結(jié)果高度不致,每個(gè)結(jié)點(diǎn)保存指向真實(shí)數(shù)據(jù)的指針,相比B+樹(shù)每一層每屋存儲(chǔ)的元素更多,顯得更高一點(diǎn)。 |
B+樹(shù) | B+樹(shù)相比較于另外兩種樹(shù),顯得更矮更寬,查詢層次更淺 |
9.B+樹(shù)的實(shí)現(xiàn)
一個(gè)m階的B+樹(shù)具有如下幾個(gè)特征:1.有k個(gè)子樹(shù)的中間節(jié)點(diǎn)包含有k個(gè)元素(B樹(shù)中是k-1個(gè)元素),每個(gè)元素不保存數(shù)據(jù),只用來(lái)索引,所有數(shù)據(jù)都保存在葉子節(jié)點(diǎn)。2.所有的葉子結(jié)點(diǎn)中包含了全部元素的信息,及指向含這些元素記錄的指針,且葉子結(jié)點(diǎn)本身依關(guān)鍵字的大小自小而大順序鏈接。3.所有的中間節(jié)點(diǎn)元素都同時(shí)存在于子節(jié)點(diǎn),在子節(jié)點(diǎn)元素中是最大(或最?。┰?/code>
10.為什么使用B+Tree
索引查找過(guò)程中就要產(chǎn)生磁盤(pán)I/O消耗,主要看IO次數(shù),和磁盤(pán)存取原理有關(guān)。根據(jù)B-Tree的定義,可知檢索一次最多需要訪問(wèn)h個(gè)節(jié)點(diǎn)。數(shù)據(jù)庫(kù)系統(tǒng)的設(shè)計(jì)者巧妙利用了磁盤(pán)預(yù)讀原理,將一個(gè)節(jié)點(diǎn)的大小設(shè)為等于一個(gè)頁(yè),這樣每個(gè)節(jié)點(diǎn)只需要一次I/O就可以完全載入局部性原理與磁盤(pán)預(yù)讀
11.Sql的優(yōu)化
1.sql盡量使用索引,而且查詢要走索引
2.對(duì)sql語(yǔ)句優(yōu)化
子查詢變成left joinlimit 分布優(yōu)化,先利用ID定位,再分頁(yè)or條件優(yōu)化,多個(gè)or條件可以用union all對(duì)結(jié)果進(jìn)行合并(union all結(jié)果可能重復(fù))不必要的排序where代替having,having 檢索完所有記錄,才進(jìn)行過(guò)濾避免嵌套查詢對(duì)多個(gè)字段進(jìn)行等值查詢時(shí),聯(lián)合索引
12.索引最左前綴問(wèn)題
如果對(duì)三個(gè)字段建立聯(lián)合索引,如果第二個(gè)字段沒(méi)有使用索引,第三個(gè)字段也使用不到索引了
13.索引分類,索引失效條件
索引類型 | 概念 |
---|
普通索引 | 最基本的索引,沒(méi)有任何限制 |
唯一索引 | 與"普通索引"類似,不同的就是:索引列的值必須唯一,但允許有空值。 |
主鍵索引 | 它是一種特殊的唯一索引,不允許有空值。 |
全文索引 | 針對(duì)較大的數(shù)據(jù),生成全文索引很耗時(shí)好空間。 |
組合索引 | 為了更多的提高mysql效率可建立組合索引,遵循”最左前綴“原則 |
失效條件條件是or,如果還想讓or條件生效,給or每個(gè)字段加個(gè)索引like查詢,以%開(kāi)發(fā)內(nèi)部函數(shù)對(duì)索引列進(jìn)行計(jì)算is null不會(huì)用,is not null 會(huì)用
14.數(shù)據(jù)庫(kù)的主從復(fù)制
復(fù)制方式 | 操作 |
---|
異步復(fù)制 | 默認(rèn)異步復(fù)制,容易造成主庫(kù)數(shù)據(jù)和從庫(kù)不一致,一個(gè)數(shù)據(jù)庫(kù)為Master,一個(gè)數(shù)據(jù)庫(kù)為slave,通過(guò)Binlog日志,slave兩個(gè)線程,一個(gè)線程去讀master binlog日志,寫(xiě)到自己的中繼日志一個(gè)線程解析日志,執(zhí)行sql,master啟動(dòng)一個(gè)線程,給slave傳遞binlog日志 |
半同步復(fù)制 | 只有把master發(fā)送的binlog日志寫(xiě)到slave的中繼日志,這時(shí)主庫(kù),才返回操作完成的反饋,性能有一定降低 |
并行操作 | slave 多個(gè)線程去請(qǐng)求binlog日志 |
15.long_query怎么解決
設(shè)置參數(shù),開(kāi)啟慢日志功能,得到耗時(shí)超過(guò)一定時(shí)間的sql
16.varchar和char的使用場(chǎng)景
類型 | 使用場(chǎng)景 |
---|
varchar | 字符長(zhǎng)度經(jīng)常變的 |
char | 用字符長(zhǎng)度固定的 |
17.數(shù)據(jù)庫(kù)連接池的作用
維護(hù)一定數(shù)量的連接,減少創(chuàng)建連接的時(shí)間更快的響應(yīng)時(shí)間統(tǒng)一的管理
19.分庫(kù)分表,主從復(fù)制,讀寫(xiě)分離
讀寫(xiě)分離,讀從庫(kù),寫(xiě)主庫(kù)spring配置兩個(gè)數(shù)據(jù)庫(kù),通過(guò)AOP(面向切面編程),在寫(xiě)或讀方法前面進(jìn)行判斷得到動(dòng)態(tài)切換數(shù)據(jù)源。
20.數(shù)據(jù)庫(kù)三范式
級(jí)別 | 概念 |
---|
1NF | 屬性不可分 |
2NF | 非主鍵屬性,完全依賴于主鍵屬性 |
3NF | 非主鍵屬性無(wú)傳遞依賴 |
21.關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)區(qū)別
關(guān)系型數(shù)據(jù)庫(kù)
優(yōu)點(diǎn)1、容易理解:二維表結(jié)構(gòu)是非常貼近邏輯世界一個(gè)概念,關(guān)系模型相對(duì)網(wǎng)狀、層次等其他模型來(lái)說(shuō)更容易理解;2、使用方便:通用的SQL語(yǔ)言使得操作關(guān)系型數(shù)據(jù)庫(kù)非常方便;3、易于維護(hù):豐富的完整性(實(shí)體完整性、參照完整性和用戶定義的完整性)大大減低了數(shù)據(jù)冗余和數(shù)據(jù)不一致的概率;4、支持SQL,可用于復(fù)雜的查詢。5.支持事務(wù)缺點(diǎn)1、為了維護(hù)一致性所付出的巨大代價(jià)就是其讀寫(xiě)性能比較差;2、固定的表結(jié)構(gòu);3、不支持高并發(fā)讀寫(xiě)需求;4、不支持海量數(shù)據(jù)的高效率讀寫(xiě)
非關(guān)系型數(shù)據(jù)庫(kù)
1、使用鍵值對(duì)存儲(chǔ)數(shù)據(jù);2、分布式;優(yōu)點(diǎn)無(wú)需經(jīng)過(guò)sql層的解析,讀寫(xiě)性能很高基于鍵值對(duì),數(shù)據(jù)沒(méi)有耦合性,容易擴(kuò)展存儲(chǔ)數(shù)據(jù)的格式:nosql的存儲(chǔ)格式是key,value形式缺點(diǎn)不提供sql支持
22.數(shù)據(jù)庫(kù)中join的inner join, outer join, cross join
1.以A,B兩張表為例A left join B選出A的所有記錄,B表中沒(méi)有的以null 代替right join 同理2.inner joinA,B的所有記錄都選出,沒(méi)有的記錄以null代替3.cross join (笛卡爾積)A中的每一條記錄和B中的每一條記錄生成一條記錄例如A中有4條,B中有4條,cross join 就有16條記錄
23.有哪些鎖,select時(shí)怎么加排它鎖
鎖 | 概念 |
---|
樂(lè)觀鎖 | 自己實(shí)現(xiàn),通過(guò)版本號(hào) |
悲觀鎖 | 共享鎖,多個(gè)事務(wù),只能讀不能寫(xiě),加 lock in share mode |
排它鎖 | 一個(gè)事務(wù),只能寫(xiě),for update |
行鎖 | 作用于數(shù)據(jù)行 |
表鎖 | 作于用表 |
24.死鎖怎么解決
找到進(jìn)程號(hào),kill 進(jìn)程
25.最左匹配原則
最左匹配原則是針對(duì)索引的舉例來(lái)說(shuō):兩個(gè)字段(name,age)建立聯(lián)合索引,如果where age=12這樣的話,是沒(méi)有利用到索引的,這里我們可以簡(jiǎn)單的理解為先是對(duì)name字段的值排序,然后對(duì)age的數(shù)據(jù)排序,如果直接查age的話,這時(shí)就沒(méi)有利用到索引了,查詢條件where name=‘xxx’ and age=xx 這時(shí)的話,就利用到索引了,再來(lái)思考下where age=xx and name=’xxx‘ 這個(gè)sql會(huì)利用索引嗎,按照正常的原則來(lái)講是不會(huì)利用到的,但是優(yōu)化器會(huì)進(jìn)行優(yōu)化,把位置交換下。這個(gè)sql也能利用到索引了
之前的排版有問(wèn)題,效果不好,重新排了版,增加了目錄和優(yōu)化了展示,
如果覺(jué)得對(duì)你有幫助的話,求點(diǎn)贊,求關(guān)注,比心