綿陽網(wǎng)站建設(shè)scmmwl百度影響力排名順序
一.聯(lián)合查詢
面試問題:
聚合查詢與聯(lián)合查詢的區(qū)別
聚合查詢是行與行之間的數(shù)據(jù)加工
聚合函數(shù) :count,sum,avg...
group by 進行分組,指定列的值,相同的記錄合并到同一個組,每個組又可以分別進行聚合查詢
分組還可以指定條件篩選,如果分組之前指定條件 用where,如果對分組之后指定條件,用having


聯(lián)合查詢(多表查詢) 關(guān)鍵操作就是笛卡爾積
1.自連接
自己和自己進行笛卡爾積,自連接的本質(zhì)其實是把行與行之間的比較條件轉(zhuǎn)換成列和列









自連接的關(guān)鍵就是可以把行轉(zhuǎn)換成列
2.子查詢
本質(zhì)就是套娃,子查詢就是把拆分好的代碼合并再一起
子查詢是指嵌入在其他sql語句中的select語句,也叫嵌套查詢
單行子查詢:返回一行記錄的子查詢
查詢與“不想畢業(yè)” 同學(xué)的同班同學(xué):



有時候子查詢可能會查詢出多條記錄,就不能用= 就要用in這樣的操作
多行子查詢
返回多行記錄的子查詢
案例:查詢“語文”或“英文”課程的成績信息


3.合并查詢
多個查詢結(jié)果合并到一起,為了合并多個select的執(zhí)行結(jié)果,可以使用集合操作符 union,union all。使用UNION
和UNION ALL時,前后查詢的結(jié)果集中,字段需要一致。



union操作會自動的進行去重,union是不會去重的,
二.MySQL的索引事務(wù)(面試)
1.索引
1.1概念
索引是一種特殊的文件,包含對數(shù)據(jù)表里所有記錄的引用指針.可以對表中的一列或者多列創(chuàng)建索引,并指定索引的類型,各類索引有各自的數(shù)據(jù)結(jié)構(gòu)實現(xiàn),


1.2作用
索引的主要意義就是查找,提高查找的效率, 但是付出了代價, 書的目錄是廢紙,數(shù)據(jù)庫的索引需要消耗一定的額外的存儲空間,
數(shù)據(jù)量越大,索引消耗的額外空間就越多,書的目錄如果確定了,后續(xù)對書的內(nèi)容調(diào)整,都可能會影響到目錄的準(zhǔn)確性,就需要調(diào)整目錄 ,數(shù)據(jù)庫的額索引也是一樣,當(dāng)進行增刪查改的時候,往往需要同步調(diào)整索引的結(jié)構(gòu),
優(yōu)點:提高查找速度,缺點:占用了更多空間,并拖慢了增刪改的速度

1.3 使用場景
要考慮對數(shù)據(jù)庫表的某列或某幾列創(chuàng)建索引,需要考慮以下幾點:
數(shù)據(jù)量較大,且經(jīng)常對這些列進行條件查詢。
該數(shù)據(jù)庫表的插入操作,及對這些列的修改操作頻率較低。
索引會占用額外的磁盤空間。
滿足以上條件時,考慮對表中的這些字段創(chuàng)建索引,以提高查詢效率。
反之,如果非條件查詢列,或經(jīng)常做插入、修改操作,或磁盤空間不足時,不考慮創(chuàng)建索引。
1.4使用
查看索引



創(chuàng)建索引


刪除索引

1.5索引背后的數(shù)據(jù)結(jié)構(gòu)(面試)
面試中考察重點是索引背后的數(shù)據(jù)結(jié)構(gòu)
1.如果是順序表和鏈表,想要查找,就需要遍歷
這里的查找是按照"數(shù)值查找"
并不是按照"下標(biāo)查找",按照下標(biāo)來訪問元素,不叫查找


2.二叉搜索樹
查找的時間復(fù)雜度是o(N)
最壞的情況下,是單分支的樹,就是鏈表
AVL:要求任意節(jié)點左右子樹高度差不超過1
紅黑樹 :要求更寬松的平衡二叉樹
二樹的最大的問題:當(dāng)元素多了時候,高度就高了(高度對應(yīng)著比較次數(shù)),對于數(shù)據(jù)庫來說,每次比較都代表磁盤io
3.哈希表
雖然哈希表查找速度很快(o(1))
但是哈希表只能針對"相等"進行判定,不能對"大于小于:",以及范圍查找
4.堆
只能找最大最小
最適合做索引還是樹形結(jié)構(gòu),只不過不再是二叉樹
使用"多叉搜索樹",高度自然就下降
5.B+樹
數(shù)據(jù)庫索引中最常見的數(shù)據(jù)結(jié)構(gòu):B+樹

如果想要了解B+樹,要先了解它的前身,B樹 有些資料也叫B-樹

原理:B樹的每個節(jié)點上,都會存儲N個key值
N個key值都劃分除了N+1個區(qū)間,每個區(qū)間都對應(yīng)一個子樹
數(shù)據(jù):10,12,15,16,17,20,21,22,25,30,33,35,37,40,41,48,50,55,60,70,90

在B樹中查找元素,過程就和二叉搜索樹相似
先從根節(jié)點出發(fā),根據(jù)待比較的元素,確定一個區(qū)間.
在確定區(qū)間的時候進行多次比較
這里和二叉搜索樹的區(qū)別在哪里
二叉樹 每個節(jié)點比一次,比較的次數(shù)與高度有關(guān)
但是B樹 高度少了,但是每個節(jié)點比較多次

數(shù)據(jù) 1,2,3,5,6,8,9,11,13,15

B+樹也是一個N叉搜索樹
每個節(jié)點都包含多個key值
每個節(jié)點如果有N個key,就分成了N個區(qū)間
父節(jié)點的值都會在子節(jié)點中體現(xiàn)
非葉子節(jié)點的每個值,都會在葉子節(jié)點體現(xiàn)出來
父節(jié)點的值,都會作為子節(jié)點的最大值(最小值),這個圖畫的是最大值的情況
最下面的葉子節(jié)點,就使用鏈表進行順序連接
B+樹的優(yōu)點
為數(shù)據(jù)庫索引量身打造
1.使用B+樹進行查找,整體的IO次數(shù)會降低
2.所有的查詢最終會落到葉子節(jié)點上,每次查詢的IO次數(shù)都是差不多,查詢速度是穩(wěn)定的
3.葉子結(jié)點用鏈表連接后,非常適合范圍查找

4.所有的數(shù)據(jù)存儲(載荷)都是放在葉子結(jié)點上,非葉子節(jié)點存儲的是key值,因此非葉子結(jié)點整體占用空間小,甚至可以緩存到內(nèi)存中,一旦全放在努力存,那么磁盤IO都沒了


2.事務(wù)
將若干個獨立的操作打包成一個整體


2.1原子性
要么全都執(zhí)行完,要么一個都不執(zhí)行,任務(wù)不可再被細(xì)分
舉例



事務(wù)的原子性,能避免出現(xiàn)這種中間狀態(tài)


這種還原性工作叫回滾(rollback)

數(shù)據(jù)庫是如何直到還原成哪個值呢



2.2.事務(wù)四個特性(面試)
1.原子性
2.一致性
在事務(wù)執(zhí)行之前,和執(zhí)行之后,數(shù)據(jù)庫中的數(shù)據(jù)都得是合理合法的,
例如:轉(zhuǎn)賬以后不能出現(xiàn)賬戶為負(fù)數(shù)的額情況
3.持久性
事務(wù)一旦移交,數(shù)據(jù)就持久化存儲起來----寫入到硬盤中
4.隔離性(重點)
描述的是,事務(wù)并發(fā)執(zhí)行的時候,產(chǎn)生的情況

舉例:


最后我把代碼改了
1.臟讀問題:


解決方法:給寫操作加鎖


2.不可重復(fù)讀問題






3.幻讀問題
一個事務(wù)執(zhí)行過程中進行多次查詢,多次查詢的結(jié)果不一樣(多了一條或者少了一條) 這種也算是一種特殊的不可重復(fù)讀



解決方法:徹底串行化執(zhí)行

