MySQL 知識點(diǎn)整理

1. 事務(wù)隔離級別

事物隔離級別 缺點(diǎn)
Read-Uncommitted 臟讀
Read-Committed 不開重復(fù)讀
Repeatable-Read 幻讀
Serializable 并發(fā)低
  • MySQL默認(rèn)Repeatable-Read

    • 生產(chǎn)中遇到的bug
      sql = """ 
          SELECT
              user_id,
              say_content
          FROM
              `say_log`
          WHERE
              add_time > %s
      """
    
      while True:
          # 取最近30min記錄
          pre_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time() - 30*60))
          items = conn.execute(sql, pre_time ).fetchall()
          ......
    
    • bug原因已經(jīng)解決方案
      # mysql事物隔離級別默認(rèn)為Repeatable-Read, 
      # 事物的狀態(tài)維持在第一次執(zhí)行失數(shù)據(jù)庫狀態(tài),
      # 導(dǎo)致后續(xù)時(shí)間新增內(nèi)容無法讀取
      while True:
        pre_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time() - 30*60))
        items = conn.execute(sql, pre_time ).fetchall()
        conn.commit() # 每次提交事務(wù),解決bug
    
    • 修改事物隔離級別SQL語句:
    SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}
    

2. 鎖機(jī)制

  • 表鎖(MyISAM默認(rèn)鎖)
    • 不會死鎖
    • 并發(fā)效率低
  • 行鎖(InnoDB默認(rèn)鎖)
    • 會導(dǎo)致死鎖
    • 并發(fā)效率高
  • 鎖類型
X (排他鎖) S (共享鎖) IX (意向排他鎖) IS(意向共享鎖)
X n n n n
S n y n y
IX n n y y
IS n y y y

(y表示兼容,n表示不兼容)

-- 實(shí)例
set autocommit=0;
begin;
select xx from t for update; 加上排他鎖
select xx from t lock in share mode; 加上共享鎖
commit;

3. 索引

  • 索引數(shù)據(jù)結(jié)構(gòu)
    -- mysql的InnoDB默認(rèn)使用B+tree索引
    -- 在常用字段上會,內(nèi)部優(yōu)化自動(dòng)建立hash索引(hash索引只適合等值連接)

  • 類型

    • 單列索引
      -- 唯一索引,值唯一,可以存在null
      -- 普通索引,值可重復(fù)

    • 組合索引
      -- (a, b, c) 匹配a、ab、abc 遵循從左往右原則

    • 全文索引
      -- 僅MyISAM支持,且用于英文(用于詞語模糊查找,不太實(shí)用)

    • 注意點(diǎn)
      -- 在查詢遠(yuǎn)大于插入(更新或刪除)的表上建立索引
      -- 索引應(yīng)加在低重復(fù)率的字段上
      -- 對索引值運(yùn)用函數(shù),導(dǎo)致索引失效
      -- (not)in(not)exist,導(dǎo)致索引失效

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容