MySQL 8查詢性能優化 版權信息
- ISBN:9787302583912
- 條形碼:9787302583912 ; 978-7-302-58391-2
- 裝幀:一般膠版紙
- 冊數:暫無
- 重量:暫無
- 所屬分類:>>
MySQL 8查詢性能優化 本書特色
性能不佳的查詢將影響用戶的體驗,導致業務收入下降;本書將幫助你在日常工作中更好地識別、分析和改進此類查詢。本書詳述涉及多個步驟的處理過程,包括監控查詢執行時間、識別需要優化的查詢、分析當前的性能表現以及進行優化等,還介紹相關的數據源和工具,幫助你更快地提交結果,降低系統
開銷。 《MySQL 8查詢性能優化》描述多種可提升查詢性能的策略,講述如何使用傳統的EXPLAIN命令以及新的EXPLAIN ANALYZE工具來分析查詢、如何使用Visual Explain功能來獲得執行計劃的可視化視圖、如何用直方圖獲得關于“桶”數據的分布信息。此外,將介紹鎖以及解決鎖問題的相關知識;討論MySQL優化器的工作原理,包括新的哈希聯接算法,以及在必要時改變優化器行為來縮短查詢的執行時間。通過本書,你將掌握**技術,能用合適工具提高用戶滿意度,從公司的計算資源中獲取更大價值。
MySQL 8查詢性能優化 內容簡介
主要內容
● 監控性能,找出效果不佳的查詢
● 選取要優化的查詢,**限度地提高收益
● 使用EXPLAIN ANALYZE和Visual Explain等工具來分析查詢
● 借助多種策略改進慢查詢
● 正確使用索引和直方圖,創建快速的執行計劃
● 了解并分析鎖,從而解決爭用問題,提升系統吞吐量
MySQL 8查詢性能優化 目錄
第Ⅰ部分 入門
第1章 MySQL性能優化
1.1 通盤考慮
1.2 監控
1.3 查詢的生命周期
1.4 本章小結
第2章 查詢優化方法論
2.1 綜述
2.2 核實問題
2.3 確定原因
2.4 確定解決方案
2.5 實施解決方案
2.6 主動工作
2.7 本章小結
第3章 使用Sysbench進行基準測試
3.1 *佳實踐
3.2 標準TPC基準測試
3.3 通用的基準測試工具
3.4 安裝Sysbench
3.5 執行基準測試
3.6 創建自定義基準測試
3.6.1 自定義腳本概述
3.6.2 定義選項
3.6.3 run命令
3.6.4 prepare命令
3.6.5 cleanup命令
3.6.6 注冊命令
3.7 本章小結
第4章 測試數據
4.1 下載示例數據庫
4.2 world數據庫
4.2.1 方案
4.2.2 安裝
4.3 world_x數據庫
4.3.1 方案
4.3.2 安裝
4.4 sakila數據庫
4.4.1 方案
4.4.2 安裝
4.5 employees數據庫
4.5.1 方案
4.5.2 安裝
4.6 其他數據庫
4.7 本章小結
第Ⅱ部分 信息來源
第5章 performance庫
5.1 術語
5.2 線程
5.3 instrument
5.4 消費者
5.5 事件
5.5.1 事件類型
5.5.2 事件范圍
5.5.3 事件嵌套
5.5.4 事件屬性
5.6 Actor與對象
5.7 摘要
5.8 表類型
5.9 動態配置
5.10 本章小結
第6章 sys庫
6.1 sys庫配置
6.2 格式化函數
6.3 視圖
6.4 輔助函數與過程
6.5 本章小結
第7章 information庫
7.1 何為information庫
7.2 權限
7.3 視圖
7.3.1 系統信息
7.3.2 方案信息
7.3.3 性能信息
7.3.4 權限信息
7.4 索引統計數據緩存
7.5 本章小結
第8章 SHOW語句
8.1 與information庫的關系
8.2 與performance庫的關系
8.3 引擎狀態
8.4 復制與二進制日志
8.4.1 列出二進制日志
8.4.2 查看日志事件
8.4.3 顯示連接的副本
8.5 其他語句
8.6 本章小結
第9章 慢查詢日志
9.1 配置
9.2 日志事件
9.3 匯總
9.4 本章小結
第Ⅲ部分 工具
第10章 MySQL Enterprise Monitor
10.1 概述
10.2 安裝
10.2.1 下載
10.2.2 安裝
10.3 啟動和停止Service Manager
10.3.1 在Microsoft Windows中啟動和停止Service Manager
10.3.2 在Linux中啟動和停止Service Manager
10.4 添加MySQL實例
10.5 圖形管理界面
10.5.1 通用導航
10.5.2 建議器
10.5.3 時序圖
10.5.4 查詢分析器
10.6 本章小結
第11章 MySQL Workbench
11.1 安裝
11.1.1 Microsoft Windows
11.1.2 Enterprise Linux
11.1.3 Debian和Ubuntu
11.2 創建連接
11.3 使用MySQL Workbench
11.3.1 概要
11.3.2 配置
11.3.3 安全設置
11.3.4 重新格式化查詢
11.4 EER圖
11.5 本章小結
第12章 MySQL shell
12.1 概要
12.1.1 安裝MySQL shell
12.1.2 調用MySQL shell
12.1.3 創建連接
12.1.4 語言模式
12.1.5 內建幫助
12.1.6 內建全局對象
12.2 提示符
12.2.1 內置提示符
12.2.2 自定義提示符
12.2.3 Powerline和Awesome字體
12.3 使用外部模塊
12.4 報表基礎架構
12.4.1 報表信息和幫助
12.4.2 執行報表
12.4.3 添加自己的報表
12.5 插件
12.6 本章小結
第Ⅳ部分 方案考量與查詢優化器
第13章 數據類型
13.1 為何是數據類型
13.1.1 數據驗證
13.1.2 文檔
13.1.3 優化存儲
13.1.4 性能
13.1.5 正確排序
13.2 MySQL的數據類型
13.2.1 數值類型
13.2.2 日期和時間類型
13.2.3 字符串與二進制類型
13.2.4 JSON數據類型
13.2.5 空間數據類型
13.2.6 混合數據類型
13.3 性能
13.4 應該選擇何種數據類型
13.5 本章小結
第14章 索引
14.1 什么是索引
14.2 索引的概念
14.2.1 鍵與索引
14.2.2 唯#一索引
14.2.3 主鍵
14.2.4 二級索引
14.2.5 簇聚索引
14.2.6 覆蓋索引
14.3 索引的限制
14.4 SQL語法
14.4.1 創建帶有索引的表
14.4.2 添加索引
14.4.3 移除索引
14.5 索引的缺點是什么?
14.5.1 存儲
14.5.2 更新索引
14.5.3 優化器
14.6 索引類型
14.6.1 B-tree索引
14.6.2 全文索引
14.6.3 空間索引
14.6.4 多值索引
14.6.5 哈希索引
14.7 索引的特性
14.7.1 函數索引
14.7.2 前綴索引
14.7.3 不可見索引
14.7.4 降序索引
14.7.5 分區與索引
14.7.6 自生成索引
14.8 InnoDB與索引
14.8.1 簇聚索引
14.8.2 二級索引
14.8.3 建議
14.8.4 #佳用例
14.9 索引策略
14.9.1 何時添加或者移除索引?
14.9.2 主鍵的選擇
14.9.3 添加二級索引
14.9.4 多列索引
14.9.5 覆蓋索引
14.10 本章小結
第15章 索引統計信息
15.1 何為索引統計信息?
15.2 InnoDB與索引統計信息
15.2.1 統計信息是如何被收集的?
15.2.2 頁采樣
15.2.3 事務隔離級別
15.2.4 配置統計信息類型
15.3 持久索引統計信息
15.3.1 配置
15.3.2 索引統計信息表
15.4 臨時索引統計信息
15.5 監控
15.5.1 information庫中的STATISTICS視圖
15.5.2 SHOW INDEX 語句
15.5.3 information庫中的INN0DB_TABLESTATS視圖
15.5.4 information庫中的TABLES視圖及SHOW TABLE STATUS語句
15.6 更新統計信息
15.6.1 自動更新
15.6.2 ANALYZE TABLE語句
15.6.3 mysqlcheck程序
15.7 本章小結
第16章 直方圖
16.1 何為直方圖?
16.2 何時應該添加直方圖信息?
16.3 直方圖內部信息
16.3.1 bucket
16.3.2 累積頻率
16.3.3 直方圖類型
16.4 直方圖的添加與維護
16.4.1 直方圖的創建與更新
16.4.2 采樣
16.4.3 刪除直方圖
16.5 查看直方圖數據
16.6 直方圖報告示例
16.6.1 列出所有直方圖
16.6.2 列出一個直方圖的所有信息
16.6.3 列出一個單值直方圖的桶信息
16.6.4 列出一個等高直方圖的桶信息
16.7 查詢示例
16.8 本章小結
第17章 查詢優化器
17.1 轉換
17.2 基于成本的優化
17.2.1 基礎:單表SELECT操作
17.2.2 表聯接順序
17.2.3 默認過濾效果
17.2.4 查詢成本
17.3 聯接算法
17.3.1 嵌套循環
17.3.2 塊嵌套循環
17.3.3 哈希聯接
17.4 聯接優化
17.4.1 索引合并
17.4.2 多范圍讀(MRR)
17.4.3 批量key訪問(BKA)
17.4.4 其他優化
17.5 配置優化器
17.5.1 引擎成本
17.5.2 服務器成本
17.5.3 優化器開關
17.5.4 優化器提示
17.5.5 索引提示
17.5.6 配置選項
17.6 資源組
17.6.1 獲取資源組相關信息
17.6.2 管理資源組
17.6.3 分配資源組
17.6.4 性能考量
17.7 本章小結
第18章 鎖原理與監控
18.1 為何會需要鎖?
18.2 鎖訪問級別
18.3 鎖粒度
18.3.1 用戶級別鎖
18.3.2 刷新鎖
18.3.3 元數據鎖
18.3.4 顯式表鎖
18.3.5 隱式表鎖
18.3.6 記錄鎖
18.3.7 gap鎖、next-key鎖以及預測鎖
18.3.8 插入意向鎖
18.3.9 自增鎖
18.3.10 備份鎖
18.3.11 日志鎖
18.4 獲取鎖失敗
18.4.1 元數據鎖和備份鎖等待超時
18.4.2 InnoDB鎖等待超時
18.4.3 死鎖
18.5 減少鎖相關的問題
18.5.1 事務大小與期限
18.5.2 索引
18.5.3 記錄訪問順序
18.5.4 事務隔離級別
18.5.5 搶占鎖
18.6 監控鎖
18.6.1 performance庫
18.6.2 sys庫
18.6.3 狀態計數器與InnoDB指標
18.6.4 InnoDB鎖監控與死鎖日志
18.7 本章小結
第Ⅴ部分 查詢分析
第19章 查找待優化的查詢
19.1 performance庫
19.1.1 語句事件表
19.1.2 prepared語句的匯總
19.1.3 表的I/O匯總
19.1.4 文件 I/O匯總信息
19.1.5 錯誤匯總表
19.2 sys庫
19.2.1 語句視圖
19.2.2 表I/O視圖
19.2.3 文件I/O視圖
19.2.4 語句性能分析器
19.3 MySQL Workbench
19.3.1 性能報告
19.3.2 客戶端連接報告
19.4 MySQL Enterprise Monitor
19.4.1 查詢分析器
19.4.2 時間序列圖
19.4.3 即席查詢報告
19.5 慢查詢日志
19.6 本章小結
第20章 分析查詢
20.1 EXPLAIN用法
20.1.1 顯式查詢的用法
20.1.2 EXPLAIN ANALYZE
20.1.3 連接的用法
20.2 EXPLAIN格式
20.2.1 傳統格式
20.2.2 JSON格式
20.2.3 樹狀格式
20.2.4 Visual Explain
20.3 EXPLAIN輸出
20.3.1 EXPLAIN字段
20.3.2 選擇類型
20.3.3 訪問類型
20.3.4 Extra信息
20.4 EXPLAIN示例
20.4.1 單表,全表掃描
20.4.2 單表,索引訪問
20.4.3 兩張表和覆蓋索引
20.4.4 多列索引
20.4.5 兩張表并帶有子查詢和排序
20.5 優化器跟蹤
20.6 performance庫事件分析
20.6.1 檢查存儲過程
20.6.2 分析階段事件
20.6.3 使用sys.ps_trace_thread( )過程進行分析
20.6.4 使用ps_trace_statement_digest( )過程進行分析
20.7 本章小結
第21章 事務
21.1 事務的影響
21.1.1 鎖
21.1.2 undo日志
21.2 INN0DB_TRX
21.3 InnoDB監視器
21.4 INN0DB_METRICS和sys.metrics
21.5 performance庫事務
21.5.1 事務事件及其語句
21.5.2 事務匯總表
21.6 本章小結
第22章 診斷鎖爭用
22.1 刷新鎖
22.1.1 癥狀
22.1.2 原因
22.1.3 構建
22.1.4 調研
22.1.5 解決方案
22.1.6 預防
22.2 元數據鎖和方案鎖
22.2.1 癥狀
22.2.2 原因
22.2.3 構建
22.2.4 調研
22.2.5 解決方案
22.2.6 預防
22.3 記錄鎖
22.3.1 癥狀
22.3.2 原因
22.3.3 構建
22.3.4 調研
22.3.5 解決方案
22.3.6 預防
22.4 死鎖
22.4.1 癥狀
22.4.2 原因
22.4.3 構建
22.4.4 調研
22.4.5 解決方案
22.4.6 預防
22.5 本章小結
第Ⅵ部分 提升查詢性能
第23章 配置
23.1 #佳實踐
23.2 InnoDB綜述
23.3 InnoDB緩沖池
23.3.1 緩沖池大小
23.3.2 緩沖池實例
23.3.3 轉儲緩沖池
23.3.4 舊塊子列表
23.3.5 刷新頁
23.4 重做日志
23.4.1 日志緩沖區
23.4.2 日志文件
23.5 并行查詢執行
23.6 查詢緩沖區
23.7 內部臨時表
23.8 本章小結
第24章 改變查詢計劃
24.1 測試數據
24.2 出現過多全表掃描的癥狀
24.3 錯誤查詢
24.4 未使用索引
24.4.1 不在多列索引的靠左位置
24.4.2 數據類型不匹配
24.4.3 函數依賴
24.5 改善索引的使用情況
24.5.1 添加覆蓋索引
24.5.2 錯誤索引
24.5.3 重寫復雜索引條件
24.6 重寫復雜查詢
24.6.1 公共表表達式(CTE)
24.6.2 窗口函數
24.6.3 使用聯接來重寫子查詢
24.6.4 將查詢拆分為多個部分
24.7 隊列系統:SKIP LOCKED
24.8 多個OR或者IN條件
24.9 本章小結
第25章 DDL與批量數據加載
25.1 方案更改
25.1.1 算法
25.1.2 其他考量
25.1.3 刪除或者截斷表
25.2 數據加載的一般性考量
25.3 以主鍵順序插入
25.3.1 自增長主鍵
25.3.2 插入已有數據
25.3.3 UUID主鍵
25.4 InnoDB緩沖池與二級索引
25.5 配置
25.6 事務與加載方式
25.7 MySQL shell并行數據加載
25.8 本章小結
第26章 復制
26.1 復制概述
26.2 監控
26.2.1 連接表
26.2.2 applier表
26.2.3 日志狀態
26.2.4 組復制表
26.3 連接
26.3.1 復制事件
26.3.2 網絡
26.3.3 維護源信息
26.3.4 寫入中繼日志
26.4 applier線程
26.4.1 并行applier
26.4.2 主鍵
26.4.3 放寬數據安全
26.4.4 復制過濾器
26.5 將工作負載卸載到副本
26.5.1 讀操作的橫向擴展
26.5.2 任務分離
26.6 本章小結
第27章 緩存
27.1 緩存,無處不在
27.2 MySQL中的緩存
27.2.1 緩存表
27.2.2 直方圖統計信息
27.3 Memcached
27.3.1 獨立服務器模式下的Memcached
27.3.2 MySQL InnoDB Memcached插件
27.4 ProxySQL
27.5 緩存技巧
27.6 本章小結
展開全部
MySQL 8查詢性能優化 作者簡介
自2006年以來,Jesper Wisborg Krogh先后以SQL開發人員和數據庫管理員的身份參與到MySQL數據庫工作中,并且作為MySQL技術支持團隊的一員,工作了8年之久。他曾在MySQL Connect和Oracle OpenWorld上多次發表演講。除了出版相關書籍外,他也會定期撰寫一些以MySQL為主題的博客文章,并為Oracle知識庫撰寫了約800份文檔。此外,Jesper Wisborg Krogh也為MySQL中的sys庫,以及MySQL 5.6等相關的OCP認證考試做出了許多貢獻。
在2006年轉向MySQL及軟件開發之前,Jesper Wisborg Krogh獲得計算化學的博士學位。他現在居住在澳大利亞的悉尼,平時喜歡在戶外散步、旅行以及閱讀等。其研究領域涉及MySQL集群、MySQL Enterprise Backup(MEB)、性能優化,以及performance庫和sys庫等。