幫助中心 | 我的帳號 | 關於我們

MySQL是怎樣運行的--從根兒上理解MySQL

  • 作者:小孩子4919|責編:傅道坤
  • 出版社:人民郵電
  • ISBN:9787115547057
  • 出版日期:2020/11/01
  • 裝幀:平裝
  • 頁數:456
人民幣:RMB 109 元      售價:
放入購物車
加入收藏夾

內容大鋼
    本書採用詼諧幽默的表達方式,對MySQL的底層運行原理進行了介紹,內容涵蓋了使用MySQL的同學在求職面試和工作中常見的一些核心概念。
    本書總計22章,劃分為4個部分。第1部分介紹了MySQL入門的一些知識,比如MySQL的伺服器程序和客戶端程序有哪些、MySQL的啟動選項和系統變數,以及使用的字符集等。第2部分是本書後續章節的基礎,介紹了MySQL的一些基礎知識,比如記錄、頁面、索引、表空間的結構和用法等。第3部分則與大家在工作中經常遇到的查詢優化問題緊密相關,介紹了單表查詢、連接查詢的執行原理,MySQL基於成本和規則的優化具體指什麼,並詳細分析了EXPLAIN語句的執行結果。第4部分則是與MySQL中的事務和鎖相關,介紹了事務概念的來源,MySQL是如何實現事務的,包括redo日誌、undo日誌、MVCC、各種鎖的細節等。
    儘管本書在寫作時參考的MySQL源代碼版本是5.7.22,但是大部分內容與具體的版本號並沒有多大關係。無論是很早之前就已身居MySQL專家的人員,還是希望進一步提升技能的DBA,甚至是三五年後才會入行的「萌新」,本書都是他們徹底了解MySQL運行原理的優秀圖書。

作者介紹
小孩子4919|責編:傅道坤

目錄
第0章  楔子——閱讀前必看
第 1章  裝作自己是個小白——初識MySQL
  1.1  MySQL的客戶端/伺服器架構
  1.2  MySQL的安裝
  1.3  啟動MySQL伺服器程序
    1.3.1  在類UNIX系統中啟動伺服器程序
    1.3.2  在Windows系統中啟動伺服器程序
  1.4  啟動MySQL客戶端程序
  1.5  客戶端與伺服器連接的過程
    1.5.1  TCP/IP
    1.5.2  命名管道和共享內存
    1.5.3  UNIX域套接字
  1.6  伺服器處理客戶端請求
    1.6.1  連接管理
    1.6.2  解析與優化
    1.6.3  存儲引擎
  1.7  常用存儲引擎
  1.8  關於存儲引擎的一些操作
    1.8.1  查看當前伺服器程序支持的存儲引擎
    1.8.2  設置表的存儲引擎
  1.9  總結
第 2章  MySQL的調控按鈕——啟動選項和系統變數
  2.1  啟動選項和配置文件
    2.1.1  在命令行上使用選項
    2.1.2  配置文件中使用選項
    2.1.3  在命令行和配置文件中啟動選項的區別
  2.2  系統變數
    2.2.1  系統變數簡介
    2.2.2  查看系統變數
    2.2.3  設置系統變數
  2.3  狀態變數
  2.4  總結
第3章  字符集和比較規則
  3.1  字符集和比較規則簡介
    3.1.1  字符集簡介
    3.1.2  比較規則簡介
    3.1.3  一些重要的字符集
  3.2  MySQL中支持的字符集和比較規則
    3.2.1  MySQL中的utf8和utf8mb4
    3.2.2  字符集的查看
    3.2.3  比較規則的查看
  3.3  字符集和比較規則的應用
    3.3.1  各級別的字符集和比較規則
    3.3.2  客戶端和伺服器通信過程中使用的字符集
    3.3.3  比較規則的應用
  3.4  總結
第4章  從一條記錄說起——InnoDB記錄存儲結構
  4.1  準備工作
  4.2  InnoDB頁簡介
  4.3  InnoDB行格式

    4.3.1  指定行格式的語法
    4.3.2  COMPACT行格式
    4.3.3  REDUNDANT行格式
    4.3.4  溢出列
    4.3.5  DYNAMIC行格式和COMPRESSED行格式
  4.4  總結
第5章  盛放記錄的大盒子——InnoDB數據頁結構
  5.1  不同類型的頁簡介
  5.2  數據頁結構快覽
  5.3  記錄在頁中的存儲
  5.4  Page Directory(頁目錄)
  5.5  Page Header(頁面頭部)
  5.6  File Header(文件頭部)
  5.7  File Trailer(文件尾部)
  5.8  總結
第6章  快速查詢的秘籍——B+樹索引
  6.1  沒有索引時進行查找
    6.1.1  在一個頁中查找
    6.1.2  在很多頁中查找
  6.2  索引
    6.2.1  一個簡單的索引方案
    6.2.2  InnoDB中的索引方案
    6.2.3  InnoDB中B+樹索引的注意事項
    6.2.4  MyISAM中的索引方案簡介
    6.2.5  MySQL中創建和刪除索引的語句
  6.3  總結
第7章  B+樹索引的使用
  7.1  B+樹索引示意圖的簡化
  7.2  索引的代價
  7.3  應用B+樹索引
    7.3.1  掃描區間和邊界條件
    7.3.2  索引用於排序
    7.3.3  索引用於分組
  7.4  回表的代價
  7.5  更好地創建和使用索引
    7.5.1  只為用於搜索、排序或分組的列創建索引
    7.5.2  考慮索引列中不重複值的個數
    7.5.3  索引列的類型盡量小
    7.5.4  為列前綴建立索引
    7.5.5  覆蓋索引
    7.5.6  讓索引列以列名的形式在搜索條件中單獨出現
    7.5.7  新插入記錄時主鍵大小對效率的影響
    7.5.8  冗余和重複索引
  7.6  總結
第8章  數據的家——MySQL的數據目錄
  8.1  資料庫和文件系統的關係
  8.2  MySQL數據目錄
    8.2.1  數據目錄和安裝目錄的區別
    8.2.2  如何確定MySQL中的數據目錄
  8.3  數據目錄的結構

    8.3.1  資料庫在文件系統中的表示
    8.3.2  表在文件系統中的表示
    8.3.3  其他的文件
  8.4  文件系統對資料庫的影響
  8.5  MySQL系統資料庫簡介
  8.6  總結
第9章  存放頁面的大池子——InnoDB的表空間
  9.1  回憶一些舊知識
    9.1.1  頁面類型
    9.1.2  頁面通用部分
  9.2  獨立表空間結構
    9.2.1  區的概念
    9.2.2  段的概念
    9.2.3  區的分類
    9.2.4  段的結構
    9.2.5  各類型頁面詳細情況
    9.2.6  Segment Header結構的運用
    9.2.7  真實表空間對應的文件大小
  9.3  系統表空間
  9.4  總結
第 10章  條條大路通羅馬——單表訪問方法
  10.1  訪問方法的概念
  10.2  const
  10.3  ref
  10.4  ref_or_null
  10.5  range
  10.6  index
  10.7  all
  10.8  注意事項
    10.8.1  重溫二級索引+回表
    10.8.2  索引合併
  10.9  總結
第 11章  兩個表的親密接觸——連接的原理
  11.1  連接簡介
    11.1.1  連接的本質
    11.1.2  連接過程簡介
    11.1.3  內連接和外連接
  11.2  連接的原理
    11.2.1  嵌套循環連接
    11.2.2  使用索引加快連接速度
    11.2.3  基於塊的嵌套循環連接
  11.3  總結
第 12章  誰最便宜就選誰——基於成本的優化
  12.1  什麼是成本
  12.2  單表查詢的成本
    12.2.1  準備工作
    12.2.2  基於成本的優化步驟
    12.2.3  基於索引統計數據的成本計算
  12.3  連接查詢的成本
    12.3.1  準備工作

    12.3.2  條件過濾(Condition Filtering)
    12.3.3  兩表連接的成本分析
    12.3.4  多表連接的成本分析
  12.4  調節成本常數
    12.4.1  mysql.server_cost表
    12.4.2  mysql.engine_cost表
  12.5  總結
第 13章  兵馬未動,糧草先行——InnoDB統計數據是如何收集的
  13.1  統計數據的存儲方式
  13.2  基於磁碟的永久性統計數據
    13.2.1  innodb_table_stats
    13.2.2  innodb_index_stats
    13.2.3  定期更新統計數據
    13.2.4  手動更新innodb_table_stats和innodb_index_stats表
  13.3  基於內存的非永久性統計數據
  13.4  innodb_stats_method的使用
  13.5  總結
第 14章  基於規則的優化(內含子查詢優化二三事)
  14.1  條件化簡
    14.1.1  移除不必要的括弧
    14.1.2  常量傳遞
    14.1.3  移除沒用的條件
    14.1.4  表達式計算
    14.1.5  HAVING子句和WHERE子句的合併
    14.1.6  常量表檢測
  14.2  外連接消除
  14.3  子查詢優化
    14.3.1  子查詢語法
    14.3.2  子查詢在MySQL中是怎麼執行的
  14.4  總結
第 15章  查詢優化的百科全書——EXPLAIN詳解
  15.1  執行計劃輸出中各列詳解
    15.1.1  table
    15.1.2  id
    15.1.3  select_type
    15.1.4  partitions
    15.1.5  type
    15.1.6  possible_keys和key
    15.1.7  key_len
    15.1.8  ref
    15.1.9  rows
    15.1.10  filtered
    15.1.11  Extra
  15.2  JSON格式的執行計劃
  15.3  Extented EXPLAIN
  15.4  總結
第 16章  神兵利器——optimizer trace的神奇功效
  16.1  optimizer trace簡介
  16.2  通過optimizer trace分析查詢優化器的具體工作過程
第 17章  調節磁碟和CPU的矛盾——InnoDB的Buffer Pool

  17.1  緩存的重要性
  17.2  InnoDB的Buffer Pool
    17.2.1  啥是Buffer Pool
    17.2.2  Buffer Pool內部組成
    17.2.3  free鏈表的管理
    17.2.4  緩衝頁的哈希處理
    17.2.5  flush鏈表的管理
    17.2.6  LRU鏈表的管理
    17.2.7  其他的一些鏈表
    17.2.8  刷新臟頁到磁碟
    17.2.9  多個Buffer Pool實例
    17.2.10  innodb_buffer_pool_chunk_size
    17.2.11  配置Buffer Pool時的注意事項
    17.2.12  查看Buffer Pool的狀態信息
  17.3  總結
第 18章  從貓爺借錢說起——事務簡介
  18.1  事務的起源
    18.1.1  原子性(Atomicity)
    18.1.2  隔離性(Isolation)
    18.1.3  一致性(Consistency)
    18.1.4  持久性(Durability)
  18.2  事務的概念
  18.3  MySQL中事務的語法
    18.3.1  開啟事務
    18.3.2  提交事務
    18.3.3  手動中止事務
    18.3.4  支持事務的存儲引擎
    18.3.5  自動提交
    18.3.6  隱式提交
    18.3.7  保存點
  18.4  總結
第 19章  說過的話就一定要做到——redo日誌
  19.1  事先說明
  19.2  redo日誌是啥
  19.3  redo日誌格式
    19.3.1  簡單的redo日誌類型
    19.3.2  複雜一些的redo日誌類型
    19.3.3  redo日誌格式小結
  19.4  Mini-Transaction
    19.4.1  以組的形式寫入redo日誌
    19.4.2  Mini-Transaction的概念
  19.5  redo日誌的寫入過程
    19.5.1  redo log block
    19.5.2  redo日誌緩衝區
    19.5.3  redo日誌寫入log buffer
  19.6  redo日誌文件
    19.6.1  redo日誌刷盤時機
    19.6.2  redo日誌文件組
    19.6.3  redo日誌文件格式
  19.7  log sequence number

    19.7.1  flushed_to_disk_lsn
    19.7.2  lsn值和redo日誌文件組中的偏移量的對應關係
    19.7.3  flush鏈表中的lsn
  19.8  checkpoint
  19.9  用戶線程批量從flush鏈表中刷出臟頁
  19.10  查看系統中的各種lsn值
  19.11  innodb_flush_log_at_trx_commit的用法
  19.12  崩潰恢復
    19.12.1  確定恢復的起點
    19.12.2  確定恢復的終點
    19.12.3  怎麼恢復
  19.13  遺漏的問題:LOG_BLOCK_HDR_NO是如何計算的
  19.14  總結
第 20章  後悔了怎麼辦——undo日誌
  20.1  事務回滾的需求
  20.2  事務id
    20.2.1  分配事務id的時機
    20.2.2  事務id是怎麼生成的
    20.2.3  trx_id隱藏列
  20.3  undo日誌的格式
    20.3.1  INSERT操作對應的undo日誌
    20.3.2  DELETE操作對應的undo日誌
    20.3.3  UPDATE操作對應的undo日誌
    20.3.4  增刪改操作對二級索引的影響
  20.4  通用鏈表結構
  20.5  FIL_PAGE_UNDO_LOG頁面
  20.6  Undo頁面鏈表
    20.6.1  單個事務中的Undo頁面鏈表
    20.6.2  多個事務中的Undo頁面鏈表
  20.7  undo日誌具體寫入過程
    20.7.1  段的概念
    20.7.2  Undo Log Segment Header
    20.7.3  Undo Log Header
    20.7.4  小結
  20.8  重用Undo頁面
  20.9  回滾段
    20.9.1  回滾段的概念
    20.9.2  從回滾段中申請Undo頁面鏈表
    20.9.3  多個回滾段
    20.9.4  回滾段的分類
    20.9.5  roll_pointer的組成
    20.9.6  為事務分配Undo頁面鏈表的詳細過程
  20.10  回滾段相關配置
    20.10.1  配置回滾段數量
    20.10.2  配置undo表空間
  20.11  undo日誌在崩潰恢復時的作用
  20.12  總結
第 21章  一條記錄的多副面孔——事務隔離級別和MVCC
  21.1  事前準備
  21.2  事務隔離級別

    21.2.1  事務併發執行時遇到的一致性問題
    21.2.2  SQL標準中的4種隔離級別
    21.2.3  MySQL中支持的4種隔離級別
  21.3  MVCC原理
    21.3.1  版本鏈
    21.3.2  ReadView
    21.3.3  二級索引與MVCC
    21.3.4  MVCC小結
  21.4  關於purge
  21.5  總結
第 22章  工作面試老大難——鎖
  22.1  解決併發事務帶來問題的兩種基本方式
    22.1.1  寫-寫情況
    22.1.2  讀-寫或寫-讀情況
    22.1.3  一致性讀
    22.1.4  鎖定讀
    22.1.5  寫操作
  22.2  多粒度鎖
  22.3  MySQL中的行鎖和表鎖
    22.3.1  其他存儲引擎中的鎖
    22.3.2  InnoDB存儲引擎中的鎖
    22.3.3  InnoDB鎖的內存結構
  22.4  語句加鎖分析
    22.4.1  普通的SELECT語句
    22.4.2  鎖定讀的語句
    22.4.3  半一致性讀的語句
    22.4.4  INSERT語句
  22.5  查看事務加鎖情況
    22.5.1  使用information_schema資料庫中的表獲取鎖信息
    22.5.2  使用SHOW ENINGE INNODB STATUS獲取鎖信息
  22.6  死鎖
  22.7  總結
參考資料

  • 商品搜索:
  • | 高級搜索
首頁新手上路客服中心關於我們聯絡我們Top↑
Copyrightc 1999~2008 美商天龍國際圖書股份有限公司 臺灣分公司. All rights reserved.
營業地址:臺北市中正區重慶南路一段103號1F 105號1F-2F
讀者服務部電話:02-2381-2033 02-2381-1863 時間:週一-週五 10:00-17:00
 服務信箱:bookuu@69book.com 客戶、意見信箱:cs@69book.com
ICP證:浙B2-20060032