MySQL近日學(xué)習(xí)總結(jié)

架構(gòu)

  1. MySQL架構(gòu)可以分為兩部分:Server層和存儲引擎
  2. Server層包括 連接器,查詢引擎招盲,解析器,優(yōu)化器嘉冒,涵蓋了MySQL的大多數(shù)核心服務(wù)功能曹货,以及所有的內(nèi)置函數(shù)。
  3. 存儲引擎 負(fù)責(zé)數(shù)據(jù)的存儲和提取讳推。架構(gòu)是插件式的顶籽,可以根據(jù)不同的需求選擇不同的存儲引擎。最常用的是MyISAM和InnoDB银觅。

索引(Index)

  • 定義:是存儲引擎用于快速找到記錄的一種數(shù)據(jù)結(jié)構(gòu)(排好序的快速查找數(shù)據(jù)結(jié)構(gòu))

  • 優(yōu)點(diǎn):提高了檢索效率礼饱,降低IO成本;降低排序成本究驴,降低CPU的消耗

  • 缺點(diǎn):降低表的更新速度(Insert update delete)镊绪;索引也是一張表,也會占用空間

  • 分類:1. 單值索引 2. 唯一索引(索引列的值必須唯一洒忧,可為null) 3. 復(fù)合索引

  • 基本語法:
    創(chuàng)建:create index [索引名] ON [表名(字段,字段...)] / alter [表名]
    add INDEX ON [表名(字段,字段...)]
    刪除:drop index [indexName] on [表名]
    查看:show index from [表名]

  • 數(shù)據(jù)結(jié)構(gòu):Hash索引 / B+Tree(InnoDB默認(rèn)索引)

  • 什么時(shí)候需要建立索引:

    1. 主鍵自動(dòng)建立唯一索引
    2. 頻繁作為查詢條件的字段
    3. 與其他表關(guān)聯(lián)的字段蝴韭,外鍵關(guān)系
    4. 排序的字段
    5. 統(tǒng)計(jì)或分組字段
  • 什么時(shí)候不需要建立索引:

    1. 表記錄太少
    2. 經(jīng)常增刪的表
    3. 數(shù)據(jù)重復(fù)且分布平均的表
  • 什么時(shí)候索引失效

    1. 違背最左前綴法則。最左前綴法則:查詢從索引的最左前列開始并且不跳過索引中的列
    2. 在索引列上計(jì)算熙侍、函數(shù)榄鉴、類型轉(zhuǎn)換
    3. 不能使用索引中范圍條件右邊的列
    4. 使用!= <>
    5. 使用is null履磨,is not null
    6. like以通配符開頭(%abc)
    7. 字符串不加單引號
    8. 使用or
  • 聚簇索引
    定義:在同一個(gè)結(jié)構(gòu)中保存了B-Tree索引和數(shù)據(jù)行。因?yàn)闊o法同時(shí)把數(shù)據(jù)行存放在兩個(gè)不同的地方庆尘,所以一個(gè)表只能有一個(gè)聚簇索引剃诅。如果沒有定義主鍵,InnoDB會選擇一個(gè)唯一的非空索引來代替驶忌。如果沒有矛辕,會隱式地定義一個(gè)主鍵來作為聚簇索引

  • 覆蓋索引,回表查詢
    參考這篇文章: https://www.cnblogs.com/myseries/p/11265849.html


EXPLAIN指令

  • 使用:explain + SQL語句
  • 組成:
    id:id相同從上到下位岔,id不同如筛,從id大到id小
    select_type:simple primary subquery derived union union result
    table:顯示這一行的數(shù)據(jù)是關(guān)于哪張表的
    type:查詢使用了什么類型

    system:表中只有一條記錄
    const:通過索引一次就找到了
    eq_ref:唯一性索引掃描。常見于唯一索引掃描
    ref:非唯一性索引掃描抒抬,返回某個(gè)單獨(dú)值的所有行
    range:檢索給定范圍的行
    index:Full Index Scan
    all:Full Table Scan

possible_keys: 可能應(yīng)用在這張表上的索引
keys: 應(yīng)用在這張表上的索引
key_len: 索引中使用的字節(jié)數(shù)
ref:索引的哪一行被使用了
rows:大致估算出所需的記錄所需要讀取的行數(shù)
Extra:包含不合適在其他列但是和重要的信息

  • 索引數(shù)據(jù)結(jié)構(gòu)
    1. B+Tree
      • 和B-Tree有什么不同杨刨?
        1. B-Tree每個(gè)節(jié)點(diǎn)都存放數(shù)據(jù),B+Tree只有葉子節(jié)點(diǎn)存放數(shù)據(jù)
        2. B-Tree的葉子節(jié)點(diǎn)沒有指向右邊的指針擦剑,B+Tree有妖胀,方便范圍查詢
    2. Hash
      哈希索引能以 O(1) 時(shí)間進(jìn)行查找,但是失去了有序性惠勒。無法用于排序與分組赚抡、只支持精確查找,無法用于部分查找和范圍查找纠屋。select * from student where id > 3;

  • 分類:
  1. 按鎖的粒度:

    • 表鎖

      1. 偏向MyISAM存儲引擎涂臣,開銷小,加鎖快售担,無死鎖赁遗,鎖的粒度大,發(fā)生鎖沖突的幾率大族铆,并發(fā)度低
      2. SQL:手動(dòng)加鎖:lock table [表名] read/write
        查詢哪些表加了鎖:show open tables
    • 行鎖:

      1. 偏向InnoDB存儲引擎岩四,開銷大,加鎖慢哥攘,會出現(xiàn)死鎖剖煌,發(fā)生鎖沖突的幾率小,并發(fā)度高

      2. 行鎖是通過索引項(xiàng)來實(shí)現(xiàn)的逝淹,只有通過索引來檢索項(xiàng)才會開啟行鎖耕姊。并且索引不能失效,索引失效的話栅葡,會從行鎖變成表鎖\岳肌!妥畏!

      3. InnoDB實(shí)現(xiàn)了兩種類型的行鎖

        • 共享鎖(讀鎖)
          允許一個(gè)事務(wù)去讀一行數(shù)據(jù)邦邦。阻止其他事務(wù)活動(dòng)相同數(shù)量集的排他鎖

        • 排他鎖(寫鎖)
          允許一個(gè)事務(wù)去更新、讀取這一行數(shù)據(jù)醉蚁。阻止其他事務(wù)獲取這個(gè)數(shù)量集的任何鎖(包括共享鎖和排他鎖)

        • 幾種上鎖的情況:
          delete燃辖、update、insert會自動(dòng)給涉及到的數(shù)據(jù)加上排他鎖网棍,直接使用select是不上任何鎖的黔龟,但是select....for update會上排他鎖、select...lock in share mode會上共享鎖滥玷。所以加上排他鎖之后不是其他事務(wù)就不能查詢該列的數(shù)據(jù)了氏身,可以用select直接查詢。

      4. 間隙鎖:用范圍條件檢索數(shù)據(jù)的時(shí)候惑畴,并請求共享或者排他鎖時(shí)蛋欣,InnoDB會給復(fù)合條件的已有數(shù)據(jù)記錄的索引項(xiàng)加鎖,對于鍵值在條件范圍內(nèi)但并不存在的記錄如贷,叫間隙(Gap)陷虎。InnoDB也會對這個(gè)間隙加鎖,叫間隙鎖杠袱。

  2. 按對數(shù)據(jù)的操作類型

  • 讀鎖(共享鎖):針對同一份數(shù)據(jù)尚猿,多個(gè)讀操作可以同時(shí)進(jìn)行而不會互相影響
  • 寫鎖(排他鎖):當(dāng)前寫操作沒有完成前,他會阻斷其他寫鎖和讀鎖

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末楣富,一起剝皮案震驚了整個(gè)濱河市凿掂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌纹蝴,老刑警劉巖庄萎,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異骗灶,居然都是意外死亡惨恭,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門耙旦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來脱羡,“玉大人,你說我怎么就攤上這事免都★惫蓿” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵绕娘,是天一觀的道長脓规。 經(jīng)常有香客問我,道長险领,這世上最難降的妖魔是什么侨舆? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任秒紧,我火速辦了婚禮,結(jié)果婚禮上挨下,老公的妹妹穿的比我還像新娘熔恢。我一直安慰自己,他們只是感情好臭笆,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布叙淌。 她就那樣靜靜地躺著,像睡著了一般愁铺。 火紅的嫁衣襯著肌膚如雪鹰霍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天茵乱,我揣著相機(jī)與錄音报腔,去河邊找鬼忌栅。 笑死茵典,一個(gè)胖子當(dāng)著我的面吹牛痹雅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播在验,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼玷氏,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了腋舌?” 一聲冷哼從身側(cè)響起盏触,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎块饺,沒想到半個(gè)月后赞辩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡授艰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年辨嗽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淮腾。...
    茶點(diǎn)故事閱讀 38,622評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡糟需,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谷朝,到底是詐尸還是另有隱情洲押,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布圆凰,位于F島的核電站杈帐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜挑童,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一累铅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧站叼,春花似錦争群、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽玉雾。三九已至翔试,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間复旬,已是汗流浹背垦缅。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留驹碍,地道東北人壁涎。 一個(gè)月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像志秃,于是被迫代替她去往敵國和親怔球。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評論 2 348