8月9日分享

http://hedengcheng.com/?p=525

插入邏輯

image.png

插入28


image.png

插入70


image.png

插入95
image.png

插入70锤灿,旋轉(zhuǎn)


image.png
  • 索引列盡量小,可以使B+樹階數(shù)增加,層數(shù)減少
  • 主鍵盡量單調(diào)遞增

刪除邏輯

B+樹使用填充因子(fill factor)來控制樹的刪除變化,50%是填充因子可設(shè)的最小值恨诱。B+樹的刪除操作同樣必須保證刪除后葉節(jié)點中的記錄依然排序,同插入一樣骗炉,B+樹的刪除操作同樣需要考慮下圖所示的三種情況照宝,與插入不同的是,刪除根據(jù)填充因子的變化來衡量句葵。


image.png

刪除70


image.png

刪除25


image.png

刪除60
  • 盡可能不要刪除厕鹃,使用deleted字段代替

復合索引

image.png
  • 可以從這個圖理解為什么復合索引使用時需要遵守最左原則

http://hedengcheng.com/?p=771
我們要知道對InnoDB來說,“行鎖”是不夠準確的乍丈,因為InnoDB分為聚簇索引和二級索引剂碴,兩種樹上都能分別加鎖。
對于一個sql語句delete from t1 where id = 10;诗赌,我們分幾種情況分析

  • id是主鍵:在聚簇索引上的id=10這一行加X鎖


    image.png
  • id是非主鍵唯一索引:如果主鍵是name汗茄,則會在二級索引上id=10的一行加X鎖,并在聚簇索引上的name=d的一行上加X鎖(假設(shè)從二級索引上查到id=10的記錄name=d)


    image.png
  • id是非主鍵非唯一索引铭若,需要區(qū)分隔離級別

    • 當隔離級別是RC(Read Committed)時,對二級索引上id=10的2行加X鎖递览,并在聚簇索引上的name=d,name=d的2行上加X鎖(假設(shè)從二級索引上查到id=10的記錄name=d叼屠,name=d兩行)


      image.png
    • 當隔離級別是RR(Repeatable Read)時,除了跟RC一樣加X鎖之外绞铃,還要加上GAP鎖(間隙鎖)镜雨,是為了防止幻讀,也就是在第一次讀和第二次讀之間儿捧,其他事務無法插入新的滿足條件的記錄荚坞。


      image.png
  • id非索引,需要區(qū)分隔離級別

    • 當隔離級別是RC(Read Committed)時,對聚簇索引的所有行加X鎖


      image.png
    • 當隔離級別是RR(Repeatable Read)時菲盾,對聚簇索引的所有行加X鎖颓影,并給所有間隙加GAP鎖


JOIN

  • join查詢的原理:
select tbl1.col1,tbl2.col2 from tbl1\
 inner join tbl2 on tbl1.col3 = tbl2.col3 \
 where tbl1.col1 in (5,6,7)

上述sql語句大概執(zhí)行如下偽代碼:

result = []
select rows1 from tbl1 where tbl.col1 in (5,6,7)
for row in rows1:
  select rows2 from tbl2 where tbl2.col3 = row.col3
  for row2 in rows2:
    result.append(row+row2)

可以看到在上述過程中,可以使用到tbl1里的col1索引懒鉴,tbl2里的col3索引
對于left outer join這一過程也成立诡挂,但full join則不行碎浇,所以mysql是不支持全外連接的

  • 但是,mysql優(yōu)化器有時候會選擇更好的策略璃俗,而不是按上述順序執(zhí)行奴璃。例:
select tbl_a.id,tbl_b.id 
-> from tbl_a 
-> inner join ab_relation on ab_relation.aid = tbl_a.id
-> inner join tbl_b on tbl_b.id = ab_relation.bid

按上條的邏輯,會首先查出所有tbl_a城豁,然后根據(jù)tbl_a.id查找ab_relation苟穆,再根據(jù)ab_relation.bid查找tbl_b。但是在tbl_a的行數(shù)比tbl_b大的時候唱星,mysql的優(yōu)化器可能會首先查找tbl_b鞭缭,再查找ab_relation,最后查找tbl_a魏颓×肜保可以思考一下,如果上述語句中不是inner join 而是 left outer join甸饱,還能調(diào)換關(guān)聯(lián)順序嗎沦童?

  • union雖然看起來跟join有點像,但是會生成一個臨時表叹话,而臨時表里是不能使用索引的偷遗,所以使用union的時候要注意盡量把where條件放到union的子句里
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市驼壶,隨后出現(xiàn)的幾起案子氏豌,更是在濱河造成了極大的恐慌,老刑警劉巖热凹,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泵喘,死亡現(xiàn)場離奇詭異,居然都是意外死亡般妙,警方通過查閱死者的電腦和手機纪铺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碟渺,“玉大人鲜锚,你說我怎么就攤上這事∩慌模” “怎么了芜繁?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長绒极。 經(jīng)常有香客問我骏令,道長,這世上最難降的妖魔是什么集峦? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任伏社,我火速辦了婚禮抠刺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘摘昌。我一直安慰自己速妖,他們只是感情好,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布聪黎。 她就那樣靜靜地躺著罕容,像睡著了一般。 火紅的嫁衣襯著肌膚如雪稿饰。 梳的紋絲不亂的頭發(fā)上锦秒,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天,我揣著相機與錄音喉镰,去河邊找鬼旅择。 笑死,一個胖子當著我的面吹牛侣姆,可吹牛的內(nèi)容都是我干的生真。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼捺宗,長吁一口氣:“原來是場噩夢啊……” “哼柱蟀!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蚜厉,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤长已,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后昼牛,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體术瓮,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年匾嘱,在試婚紗的時候發(fā)現(xiàn)自己被綠了斤斧。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡霎烙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蕊连,到底是詐尸還是另有隱情悬垃,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布甘苍,位于F島的核電站尝蠕,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏载庭。R本人自食惡果不足惜看彼,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一廊佩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧靖榕,春花似錦标锄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至星压,卻和暖如春践剂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背娜膘。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工逊脯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人竣贪。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓军洼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親贾富。 傳聞我的和親對象是個殘疾皇子歉眷,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容

  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當在唯一索引所對應的列上鍵入重復值時,會觸發(fā)此異常颤枪。 O...
    我想起個好名字閱讀 5,307評論 0 9
  • MYSQL 基礎(chǔ)知識 1 MySQL數(shù)據(jù)庫概要 2 簡單MySQL環(huán)境 3 數(shù)據(jù)的存儲和獲取 4 MySQL基本操...
    Kingtester閱讀 7,811評論 5 116
  • 奇幻莫測的大自然總會帶給我們意想不到的驚喜汗捡,連歌聲都是千變?nèi)f化的,時而悠揚悅耳畏纲,讓人心情舒暢扇住,時而震天動地,使人浩...
    小肥皂sy閱讀 815評論 2 4
  • 1.龍豪雨潤大街營業(yè)廳盗胀、集慶門大街佳斯娟營業(yè)廳及金源美食廣場河西中影內(nèi)營業(yè)廳艘蹋,自檢時未找到商戶,主動放棄4月活動申...
    看看87閱讀 350評論 0 1
  • 安裝方法一:使用homebrew管理 1.$ brew list2.$ brew install ruby3.修改...
    mervinzhu閱讀 202評論 0 2