MySQL 資料庫基礎知識點複習

木大大發表於2021-04-30
  1. redis 或者 memcache 快取減少資料庫壓力
  2. 資料庫安全
    1. 外網不可訪問(3306埠)
    2. 禁止弱口令
    3. 使用者管理許可權,給每個資料庫分配單獨的賬號,甚至根據實際情況,設定賬號的可讀可寫許可權
    4. 禁用root許可權操作
    5. ip白名單限制其它ip訪問
    6. 資料庫定時備份
  3. 資料庫的基本配置
    1. 最大連線數
    2. innodb_lock_wait_timeout 鎖超時時間(秒)
    3. tmp_table_size 臨時表數量
  4. 資料庫儲存引擎,innodb與myisam 的取捨
  5. 三正規化,每列的原子性,每行的唯一性,資料的去冗餘,以及反三正規化
  6. 資料庫欄位型別取捨,sql語句的最佳化
  7. 基本的索引,主鍵、唯一索引、普通索引、組合索引、最左原則
  8. eplain 或者 desc 執行計劃,檢視並分析具體sql語句中索引的使用情況
  9. 設定慢查詢引數,開啟慢查詢日誌,分析執行慢的sql語句進行最佳化
  10. profile 檢視具體執行時間,找出執行慢的sql語句並進行最佳化
  11. 事務的四大特性:
    1. 原子性,要麼一起成功,要麼一起回滾
    2. 一致性,事務執行前後,資料都是合法狀態
    3. 隔離性,預設隔離級別,可重複讀
    4. 永久性,執行成功,則儲存到了硬碟中
  12. 事務隔離性帶來的問題,髒讀、不可重複讀、幻讀
    1. 髒讀:事務A讀取了事務B更新的資料,然後B回滾操作,那麼A讀取到的資料是髒資料
    2. 不可重複讀:事務 A 多次讀取同一資料,事務 B 在事務A多次讀取的過程中,對資料作了更新並提交,導致事務A多次讀取同一資料時,結果 不一致。
    3. 幻讀:系統管理員A將資料庫中所有學生的成績從具體分數改為ABCDE等級,但是系統管理員B就在這個時候插入了一條具體分數的記錄,當系統管理員A改結束後發現還有一條記錄沒有改過來,就好像發生了幻覺一樣,這就叫幻讀。
    4. 小結:不可重複讀的和幻讀很容易混淆,不可重複讀側重於修改,幻讀側重於新增或刪除。解決不可重複讀的問題只需鎖住滿足條件的行,解決幻讀需要鎖表
  13. 隔離級別
    1. 讀未提交,髒讀:是,不可重複讀:是,幻讀:是
    2. 不可重複讀,髒讀:否,不可重複讀:是,幻讀:是
    3. 可重複讀,髒讀:否,不可重複讀:否,幻讀:是,mysql預設隔離級別,
    4. 序列化,,髒讀:否,不可重複讀:否,幻讀:否
  14. 鎖,表鎖、行鎖、排它鎖、意向鎖、迴圈鎖(死鎖)、讀鎖(共享鎖)、寫鎖(排它鎖),自動提交、手動開啟共享鎖、手動開啟排它鎖、等鎖概念
  15. 查詢快取(查詢快取的弊端),分析查詢快取的使用情況和命中率
  16. 對於資料量較大的資料比如資料量超千萬,進行邏輯分割槽,邏輯分割槽可以根據
    1. list 條件分割槽,根據“欄位的內容值”是否在某個“列表”中進行分割槽,透過預定義的列表的值來對資料進行分割
    2. range 範圍分割槽,根據“欄位內容的值”是否在 某個範圍進行分割槽,透過預定義的範圍值來對資料進行分割
    3. hash 雜湊分割槽,只能針對整數進行,允許透過對錶的一個或多個列的Hash Key進行計算,最後透過這個Hash碼不同數值對應的資料區域進行分割槽
    4. key 分割槽,KEY分割槽支援除text和BLOB之外的所有資料型別的分割槽
  17. 進行物理分表(水平分表),比如使用者日誌,可以根據每月一張表來進行物理分表,透過應用程式進行控制
  18. 進行垂直分表,把冷熱欄位分開來設計,減少資料庫的資源開銷
  19. 主從複製,讀寫分離,根據主資料庫的二進位制日誌去同步資料到從資料庫。
  20. 全文索引,用 sphinx 或者 es 或者 框架自帶的全文索引元件


相關連結:

mysql 效能最佳化方向 https://www.cnblogs.com/AloneSword/p/3207697.html

MySQL效能的五大配置引數 https://blog.csdn.net/xifeijian/article/details/19775017

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章