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