MySQL 8查询性能优化

MySQL 8查询性能优化
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
作者: [澳] (Jesper Wisborg Krogh) ,
2021-08
版次: 1
ISBN: 9787302583912
定价: 158.00
装帧: 其他
开本: 16开
纸张: 胶版纸
  • 主要内容 ● 监控性能,找出效果不佳的查询 ● 选取要优化的查询,**限度地提高收益 ● 使用EXPLAIN ANALYZE和Visual Explain等工具来分析查询 ● 借助多种策略改进慢查询 ● 正确使用索引和直方图,创建快速的执行计划 ● 了解并分析锁,从而解决争用问题,提升系统吞吐量 自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库等。 第Ⅰ部分  入门

    第1章  MySQL性能优化   2

    1.1  通盘考虑   2

    1.2  监控   3

    1.3  查询的生命周期   4

    1.4  本章小结   5

    第2章  查询优化方法论   6

    2.1  综述   6

    2.2  核实问题   7

    2.3  确定原因   8

    2.4  确定解决方案   8

    2.5  实施解决方案   8

    2.6  主动工作   10

    2.7  本章小结   11

    第3章  使用Sysbench进行基准测试   12

    3.1  实践   12

    3.2  标准TPC基准测试   14

    3.3  通用的基准测试工具   14

    3.4  安装Sysbench   15

    3.5  执行基准测试   20

    3.6  创建自定义基准测试   25

    3.6.1  自定义脚本概述   25

    3.6.2  定义选项   27

    3.6.3  run命令   27

    3.6.4  prepare命令   29

    3.6.5  cleanup命令   31

    3.6.6  注册命令   31

    3.7  本章小结   32

    第4章  测试数据   34

    4.1  下载示例数据库   34

    4.2  world数据库   35

    4.2.1  方案   35

    4.2.2  安装   36

    4.3  world_x数据库   36

    4.3.1  方案   36

    4.3.2  安装   36

    4.4  sakila数据库   37

    4.4.1  方案   37

    4.4.2  安装   40

    4.5  employees数据库   41

    4.5.1  方案   41

    4.5.2  安装   43

    4.6  其他数据库   44

    4.7  本章小结   44

    第Ⅱ部分  信息来源

    第5章  performance库   46

    5.1  术语   46

    5.2  线程   47

    5.3  instrument   50

    5.4  消费者   51

    5.5  事件   53

    5.5.1  事件类型   53

    5.5.2  事件范围   53

    5.5.3  事件嵌套   54

    5.5.4  事件属性   55

    5.6  Actor与对象   56

    5.7  摘要   56

    5.8  表类型   57

    5.9  动态配置   58 

    5.10  本章小结   59

    第6章  sys库   61

    6.1  sys库配置   62

    6.2  格式化函数   64

    6.3  视图   65

    6.4  辅助函数与过程   66

    6.5  本章小结   67

    第7章  information库   68

    7.1  何为information库   68

    7.2  权限   69

    7.3  视图   69

    7.3.1  系统信息   69

    7.3.2  方案信息   70

    7.3.3  性能信息   74

    7.3.4  权限信息   77

    7.4  索引统计数据缓存   78

    7.5  本章小结   79

    第8章  SHOW语句   80

    8.1  与information库的关系   81

    8.2  与performance库的关系   82

    8.3  引擎状态   83

    8.4  复制与二进制日志   84

    8.4.1  列出二进制日志   84

    8.4.2  查看日志事件   84

    8.4.3  显示连接的副本   87

    8.5  其他语句   88

    8.6  本章小结   90

    第9章  慢查询日志   92

    9.1  配置   93

    9.2  日志事件   95

    9.3  汇总   96

    9.4  本章小结   98

    第Ⅲ部分  工    具

    第10章  MySQL Enterprise Monitor   100

    10.1  概述   100

    10.2  安装   102

    10.2.1  下载   102

    10.2.2  安装   104

    10.3  启动和停止Service Manager   109

    10.3.1  在Microsoft Windows中启动和停止Service Manager   109

    10.3.2  在Linux中启动和停止Service Manager   110

    10.4  添加MySQL实例   111

    10.5  图形管理界面   113

    10.5.1  通用导航   113

    10.5.2  建议器   114

    10.5.3  时序图   116

    10.5.4  查询分析器   117

    10.6  本章小结   118

    第11章  MySQL Workbench   119

    11.1  安装   120

    11.1.1  Microsoft Windows   120

    11.1.2  Enterprise Linux 7   124

    11.1.3  Debian和Ubuntu   127

    11.2  创建连接   129

    11.3  使用MySQL Workbench   130

    11.3.1  概要   130

    11.3.2  配置   131

    11.3.3  安全设置   133

    11.3.4  重新格式化查询   133

    11.4  EER图   134

    11.5  本章小结   135

    第12章  MySQL shell   136

    12.1  概要   136

    12.1.1  安装MySQL shell   137

    12.1.2  调用MySQL shell   137

    12.1.3  创建连接   137

    12.1.4  语言模式   139

    12.1.5  内建帮助   140

    12.1.6  内建全局对象   141

    12.2  提示符   141

    12.2.1  内置提示符   141

    12.2.2  自定义提示符   143

    12.2.3  Powerline和Awesome字体   145

    12.3  使用外部模块   146

    12.4  报表基础架构   148

    12.4.1  报表信息和帮助   148

    12.4.2  执行报表   149

    12.4.3  添加自己的报表   151

    12.5  插件   155

    12.6  本章小结   161

    第Ⅳ部分  方案考量与查询优化器

    第13章  数据类型   164

    13.1  为何是数据类型   164

    13.1.1  数据验证   165

    13.1.2  文档   166

    13.1.3  优化存储   166

    13.1.4  性能   167

    13.1.5  正确排序   167

    13.2  MySQL的数据类型   167

    13.2.1  数值类型   168

    13.2.2  日期和时间类型   169

    13.2.3  字符串与二进制类型   169

    13.2.4  JSON数据类型   171

    13.2.5  空间数据类型   172

    13.2.6  混合数据类型   173

    13.3  性能   174

    13.4  应该选择何种数据类型   174

    13.5  本章小结   176

    第14章  索引   177

    14.1  什么是索引   177

    14.2  索引的概念   178

    14.2.1  键与索引   178

    14.2.2  索引   178

    14.2.3  主键   179

    14.2.4  二级索引   180

    14.2.5  簇聚索引   180

    14.2.6  覆盖索引   180

    14.3  索引的限制   181

    14.4  SQL语法   181

    14.4.1  创建带有索引的表   182

    14.4.2  添加索引   182

    14.4.3  移除索引   183

    14.5  索引的缺点是什么?   184

    14.5.1  存储   184

    14.5.2  更新索引   185

    14.5.3  优化器   185

    14.6  索引类型   186

    14.6.1  B-tree索引   186

    14.6.2  全文索引   188

    14.6.3  空间索引   189

    14.6.4  多值索引   190

    14.6.5  哈希索引   193

    14.7  索引的特性   195

    14.7.1  函数索引   196

    14.7.2  前缀索引   196

    14.7.3  不可见索引   197

    14.7.4  降序索引   198

    14.7.5  分区与索引   198

    14.7.6  自生成索引   200

    14.8  InnoDB与索引   200

    14.8.1  簇聚索引   201

    14.8.2  二级索引   201

    14.8.3  建议   201

    14.8.4  用例   201

    14.9  索引策略   202

    14.9.1  何时添加或者移除索引?   202

    14.9.2  主键的选择   203

    14.9.3  添加二级索引   203

    14.9.4  多列索引   204

    14.9.5  覆盖索引   205

    14.10  本章小结   205

    第15章  索引统计信息   206

    15.1  何为索引统计信息?   206

    15.2  InnoDB与索引统计信息   207

    15.2.1  统计信息是如何被收集的?   207

    15.2.2  页采样   208

    15.2.3  事务隔离级别   209

    15.2.4  配置统计信息类型   209

    15.3  持久索引统计信息   209

    15.3.1  配置   210

    15.3.2  索引统计信息表   211

    15.4  临时索引统计信息   214

    15.5  监控   215

    15.5.1  information库中的STATISTICS视图   215

    15.5.2  SHOW INDEX 语句   217

    15.5.3  information库中的INNODB_TABLESTATS视图   219

    15.5.4  information库中的TABLES视图及SHOW TABLE STATUS语句   220

    15.6  更新统计信息   223

    15.6.1  自动更新   223

    15.6.2  ANALYZE TABLE语句   224

    15.6.3  mysqlcheck程序   225

    15.7  本章小结   227

    第16章  直方图   229

    16.1  何为直方图?   229

    16.2  何时应该添加直方图信息?   230

    16.3  直方图内部信息   231

    16.3.1  bucket   231

    16.3.2  累积频率   232

    16.3.3  直方图类型   234

    16.4  直方图的添加与维护   236

    16.4.1  直方图的创建与更新   236

    16.4.2  采样   237

    16.4.3  删除直方图   238

    16.5  查看直方图数据   238

    16.6  直方图报告示例   239

    16.6.1  列出所有直方图   240

    16.6.2  列出一个直方图的所有信息   240

    16.6.3  列出一个单值直方图的桶信息   241

    16.6.4  列出一个等高直方图的桶信息   243

    16.7  查询示例   244

    16.8  本章小结   247

    第17章  查询优化器   248

    17.1  转换   249

    17.2  基于成本的优化   249

    17.2.1  基础:单表SELECT操作   250

    17.2.2  表联接顺序   251

    17.2.3  默认过滤效果   251

    17.2.4  查询成本   252

    17.3  联接算法   254

    17.3.1  嵌套循环   254

    17.3.2  块嵌套循环   257

    17.3.3  哈希联接   260

    17.4  联接优化   263

    17.4.1  索引合并   263

    17.4.2  多范围读(MRR)   269

    17.4.3  批量key访问(BKA)   270

    17.4.4  其他优化   271

    17.5  配置优化器   274

    17.5.1  引擎成本   275

    17.5.2  服务器成本   275

    17.5.3  优化器开关   277

    17.5.4  优化器提示   278

    17.5.5  索引提示   281

    17.5.6  配置选项   282

    17.6  资源组   282

    17.6.1  获取资源组相关信息   283

    17.6.2  管理资源组   283

    17.6.3  分配资源组   285

    17.6.4  性能考量   286

    17.7  本章小结   287

    第18章  锁原理与监控   288

    18.1  为何会需要锁?   288

    18.2  锁访问级别   289

    18.3  锁粒度   289

    18.3.1  用户级别锁   289

    18.3.2  刷新锁   291

    18.3.3  元数据锁   292

    18.3.4  显式表锁   295

    18.3.5  隐式表锁   295

    18.3.6  记录锁   297

    18.3.7  gap锁、next-key锁以及预测锁   299

    18.3.8  插入意向锁   300

    18.3.9  自增锁   302

    18.3.10  备份锁   302

    18.3.11  日志锁   304

    18.4  获取锁失败   304

    18.4.1  元数据锁和备份锁等待超时   305

    18.4.2  InnoDB锁等待超时   305

    18.4.3  死锁   306

    18.5  减少锁相关的问题   309

    18.5.1  事务大小与期限   309

    18.5.2  索引   309

    18.5.3  记录访问顺序   310

    18.5.4  事务隔离级别   310

    18.5.5  抢占锁   312

    18.6  监控锁   313

    18.6.1  performance库   313

    18.6.2  sys库   314

    18.6.3  状态计数器与InnoDB指标   314

    18.6.4  InnoDB锁监控与死锁日志   315

    18.7  本章小结   318

    第Ⅴ部分  查询分析

    第19章  查找待优化的查询   320

    19.1  performance库   321

    19.1.1  语句事件表   321

    19.1.2  prepared语句的汇总   325

    19.1.3  表的I/O汇总   327

    19.1.4  文件 I/O汇总信息   332

    19.1.5  错误汇总表   334

    19.2  sys库   335

    19.2.1  语句视图   335

    19.2.2  表I/O视图   337

    19.2.3  文件I/O视图   338

    19.2.4  语句性能分析器   340

    19.3  MySQL Workbench   343

    19.3.1  性能报告   344

    19.3.2  客户端连接报告   346

    19.4  MySQL Enterprise Monitor   346

    19.4.1  查询分析器   346

    19.4.2  时间序列图   349

    19.4.3  即席查询报告   350

    19.5  慢查询日志   352

    19.6  本章小结   352

    第20章  分析查询   354

    20.1  EXPLAIN用法   355

    20.1.1  显式查询的用法   355

    20.1.2  EXPLAIN ANALYZE   355

    20.1.3  连接的用法   356

    20.2  EXPLAIN格式   357

    20.2.1  传统格式   358

    20.2.2  JSON格式   359

    20.2.3  树状格式   362

    20.2.4  Visual Explain   364

    20.3  EXPLAIN输出   368

    20.3.1  EXPLAIN字段   368

    20.3.2  选择类型   371

    20.3.3  访问类型   372

    20.3.4  Extra信息   376

    20.4  EXPLAIN示例   377

    20.4.1  单表,全表扫描   378

    20.4.2  单表,索引访问   379

    20.4.3  两张表和覆盖索引   380

    20.4.4  多列索引   381

    20.4.5  两张表并带有子查询和排序   382

    20.5  优化器跟踪   384

    20.6  performance库事件分析   387

    20.6.1  检查存储过程   387

    20.6.2  分析阶段事件   391

    20.6.3  使用sys.ps_trace_thread( )过程进行分析   393

    20.6.4  使用ps_trace_statement_digest( )过程进行分析   396

    20.7  本章小结   400

    第21章  事务   401

    21.1  事务的影响   401

    21.1.1  锁   402

    21.1.2  undo日志   402

    21.2  INNODB_TRX   403

    21.3  InnoDB监视器   406

    21.4  INNODB_METRICS和sys.metrics   407

    21.5  performance库事务   410

    21.5.1  事务事件及其语句   410

    21.5.2  事务汇总表   416

    21.6  本章小结   417

    第22章  诊断锁争用   418

    22.1  刷新锁   419

    22.1.1  症状   419

    22.1.2  原因   419

    22.1.3  构建   420

    22.1.4  调研   420

    22.1.5  解决方案   423

    22.1.6  预防   423

    22.2  元数据锁和方案锁   424

    22.2.1  症状   424

    22.2.2  原因   424

    22.2.3  构建   424

    22.2.4  调研   425

    22.2.5  解决方案   431

    22.2.6  预防   431

    22.3  记录锁   432

    22.3.1  症状   432

    22.3.2  原因   434

    22.3.3  构建   435

    22.3.4  调研   435

    22.3.5  解决方案   436

    22.3.6  预防   437

    22.4  死锁   437

    22.4.1  症状   437

    22.4.2  原因   438

    22.4.3  构建   438

    22.4.4  调研   439

    22.4.5  解决方案   444

    22.4.6  预防   444

    22.5  本章小结   445

    第Ⅵ部分  提升查询性能

    第23章  配置   448

    23.1  实践   448

    23.2  InnoDB综述   451

    23.3  InnoDB缓冲池   452

    23.3.1  缓冲池大小   453

    23.3.2  缓冲池实例   455

    23.3.3  转储缓冲池   455

    23.3.4  旧块子列表   455

    23.3.5  刷新页   457

    23.4  重做日志   458

    23.4.1  日志缓冲区   459

    23.4.2  日志文件   459

    23.5  并行查询执行   461

    23.6  查询缓冲区   462

    23.7  内部临时表   463

    23.8  本章小结   465

    第24章  改变查询计划   466

    24.1  测试数据   466

    24.2  出现过多全表扫描的症状   467

    24.3  错误查询   468

    24.4  未使用索引   470

    24.4.1  不在多列索引的靠左位置   471

    24.4.2  数据类型不匹配   473

    24.4.3  函数依赖   476

    24.5  改善索引的使用情况   478

    24.5.1  添加覆盖索引   479

    24.5.2  错误索引   480

    24.5.3  重写复杂索引条件   487

    24.6  重写复杂查询   488

    24.6.1  公共表表达式(CTE)   489

    24.6.2  窗口函数   493

    24.6.3  使用联接来重写子查询   494

    24.6.4  将查询拆分为多个部分   495

    24.7  队列系统:SKIP LOCKED   496

    24.8  多个OR或者IN条件   498

    24.9  本章小结   502

    第25章  DDL与批量数据加载   504

    25.1  方案更改   505

    25.1.1  算法   505

    25.1.2  其他考量   506

    25.1.3  删除或者截断表   506

    25.2  数据加载的一般性考量   507

    25.3  以主键顺序插入   516

    25.3.1  自增长主键   516

    25.3.2  插入已有数据   517

    25.3.3  UUID主键   518

    25.4  InnoDB缓冲池与二级索引   519

    25.5  配置   521

    25.6  事务与加载方式   522

    25.7  MySQL shell并行数据加载   522

    25.8  本章小结   524

    第26章  复制   526

    26.1  复制概述   527

    26.2  监控   528

    26.2.1  连接表   529

    26.2.2  applier表   531

    26.2.3  日志状态   533

    26.2.4  组复制表   534

    26.3  连接   534

    26.3.1  复制事件   534

    26.3.2  网络   535

    26.3.3  维护源信息   536

    26.3.4  写入中继日志   536

    26.4  applier线程   536

    26.4.1  并行applier   537

    26.4.2  主键   538

    26.4.3  放宽数据安全   538

    26.4.4  复制过滤器   539

    26.5  将工作负载卸载到副本   540

    26.5.1  读操作的横向扩展   540

    26.5.2  任务分离   540

    26.6  本章小结   541

    第27章  缓存   542

    27.1  缓存,无处不在   542

    27.2  MySQL中的缓存   543

    27.2.1  缓存表   543

    27.2.2  直方图统计信息   545

    27.3  Memcached   546

    27.3.1  独立服务器模式下的Memcached   547

    27.3.2  MySQL InnoDB Memcached插件   549

    27.4  ProxySQL   552

    27.5  缓存技巧   558

    27.6  本章小结   559
  • 内容简介:
    主要内容 ● 监控性能,找出效果不佳的查询 ● 选取要优化的查询,**限度地提高收益 ● 使用EXPLAIN ANALYZE和Visual Explain等工具来分析查询 ● 借助多种策略改进慢查询 ● 正确使用索引和直方图,创建快速的执行计划 ● 了解并分析锁,从而解决争用问题,提升系统吞吐量
  • 作者简介:
    自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库等。
  • 目录:
    第Ⅰ部分  入门

    第1章  MySQL性能优化   2

    1.1  通盘考虑   2

    1.2  监控   3

    1.3  查询的生命周期   4

    1.4  本章小结   5

    第2章  查询优化方法论   6

    2.1  综述   6

    2.2  核实问题   7

    2.3  确定原因   8

    2.4  确定解决方案   8

    2.5  实施解决方案   8

    2.6  主动工作   10

    2.7  本章小结   11

    第3章  使用Sysbench进行基准测试   12

    3.1  实践   12

    3.2  标准TPC基准测试   14

    3.3  通用的基准测试工具   14

    3.4  安装Sysbench   15

    3.5  执行基准测试   20

    3.6  创建自定义基准测试   25

    3.6.1  自定义脚本概述   25

    3.6.2  定义选项   27

    3.6.3  run命令   27

    3.6.4  prepare命令   29

    3.6.5  cleanup命令   31

    3.6.6  注册命令   31

    3.7  本章小结   32

    第4章  测试数据   34

    4.1  下载示例数据库   34

    4.2  world数据库   35

    4.2.1  方案   35

    4.2.2  安装   36

    4.3  world_x数据库   36

    4.3.1  方案   36

    4.3.2  安装   36

    4.4  sakila数据库   37

    4.4.1  方案   37

    4.4.2  安装   40

    4.5  employees数据库   41

    4.5.1  方案   41

    4.5.2  安装   43

    4.6  其他数据库   44

    4.7  本章小结   44

    第Ⅱ部分  信息来源

    第5章  performance库   46

    5.1  术语   46

    5.2  线程   47

    5.3  instrument   50

    5.4  消费者   51

    5.5  事件   53

    5.5.1  事件类型   53

    5.5.2  事件范围   53

    5.5.3  事件嵌套   54

    5.5.4  事件属性   55

    5.6  Actor与对象   56

    5.7  摘要   56

    5.8  表类型   57

    5.9  动态配置   58 

    5.10  本章小结   59

    第6章  sys库   61

    6.1  sys库配置   62

    6.2  格式化函数   64

    6.3  视图   65

    6.4  辅助函数与过程   66

    6.5  本章小结   67

    第7章  information库   68

    7.1  何为information库   68

    7.2  权限   69

    7.3  视图   69

    7.3.1  系统信息   69

    7.3.2  方案信息   70

    7.3.3  性能信息   74

    7.3.4  权限信息   77

    7.4  索引统计数据缓存   78

    7.5  本章小结   79

    第8章  SHOW语句   80

    8.1  与information库的关系   81

    8.2  与performance库的关系   82

    8.3  引擎状态   83

    8.4  复制与二进制日志   84

    8.4.1  列出二进制日志   84

    8.4.2  查看日志事件   84

    8.4.3  显示连接的副本   87

    8.5  其他语句   88

    8.6  本章小结   90

    第9章  慢查询日志   92

    9.1  配置   93

    9.2  日志事件   95

    9.3  汇总   96

    9.4  本章小结   98

    第Ⅲ部分  工    具

    第10章  MySQL Enterprise Monitor   100

    10.1  概述   100

    10.2  安装   102

    10.2.1  下载   102

    10.2.2  安装   104

    10.3  启动和停止Service Manager   109

    10.3.1  在Microsoft Windows中启动和停止Service Manager   109

    10.3.2  在Linux中启动和停止Service Manager   110

    10.4  添加MySQL实例   111

    10.5  图形管理界面   113

    10.5.1  通用导航   113

    10.5.2  建议器   114

    10.5.3  时序图   116

    10.5.4  查询分析器   117

    10.6  本章小结   118

    第11章  MySQL Workbench   119

    11.1  安装   120

    11.1.1  Microsoft Windows   120

    11.1.2  Enterprise Linux 7   124

    11.1.3  Debian和Ubuntu   127

    11.2  创建连接   129

    11.3  使用MySQL Workbench   130

    11.3.1  概要   130

    11.3.2  配置   131

    11.3.3  安全设置   133

    11.3.4  重新格式化查询   133

    11.4  EER图   134

    11.5  本章小结   135

    第12章  MySQL shell   136

    12.1  概要   136

    12.1.1  安装MySQL shell   137

    12.1.2  调用MySQL shell   137

    12.1.3  创建连接   137

    12.1.4  语言模式   139

    12.1.5  内建帮助   140

    12.1.6  内建全局对象   141

    12.2  提示符   141

    12.2.1  内置提示符   141

    12.2.2  自定义提示符   143

    12.2.3  Powerline和Awesome字体   145

    12.3  使用外部模块   146

    12.4  报表基础架构   148

    12.4.1  报表信息和帮助   148

    12.4.2  执行报表   149

    12.4.3  添加自己的报表   151

    12.5  插件   155

    12.6  本章小结   161

    第Ⅳ部分  方案考量与查询优化器

    第13章  数据类型   164

    13.1  为何是数据类型   164

    13.1.1  数据验证   165

    13.1.2  文档   166

    13.1.3  优化存储   166

    13.1.4  性能   167

    13.1.5  正确排序   167

    13.2  MySQL的数据类型   167

    13.2.1  数值类型   168

    13.2.2  日期和时间类型   169

    13.2.3  字符串与二进制类型   169

    13.2.4  JSON数据类型   171

    13.2.5  空间数据类型   172

    13.2.6  混合数据类型   173

    13.3  性能   174

    13.4  应该选择何种数据类型   174

    13.5  本章小结   176

    第14章  索引   177

    14.1  什么是索引   177

    14.2  索引的概念   178

    14.2.1  键与索引   178

    14.2.2  索引   178

    14.2.3  主键   179

    14.2.4  二级索引   180

    14.2.5  簇聚索引   180

    14.2.6  覆盖索引   180

    14.3  索引的限制   181

    14.4  SQL语法   181

    14.4.1  创建带有索引的表   182

    14.4.2  添加索引   182

    14.4.3  移除索引   183

    14.5  索引的缺点是什么?   184

    14.5.1  存储   184

    14.5.2  更新索引   185

    14.5.3  优化器   185

    14.6  索引类型   186

    14.6.1  B-tree索引   186

    14.6.2  全文索引   188

    14.6.3  空间索引   189

    14.6.4  多值索引   190

    14.6.5  哈希索引   193

    14.7  索引的特性   195

    14.7.1  函数索引   196

    14.7.2  前缀索引   196

    14.7.3  不可见索引   197

    14.7.4  降序索引   198

    14.7.5  分区与索引   198

    14.7.6  自生成索引   200

    14.8  InnoDB与索引   200

    14.8.1  簇聚索引   201

    14.8.2  二级索引   201

    14.8.3  建议   201

    14.8.4  用例   201

    14.9  索引策略   202

    14.9.1  何时添加或者移除索引?   202

    14.9.2  主键的选择   203

    14.9.3  添加二级索引   203

    14.9.4  多列索引   204

    14.9.5  覆盖索引   205

    14.10  本章小结   205

    第15章  索引统计信息   206

    15.1  何为索引统计信息?   206

    15.2  InnoDB与索引统计信息   207

    15.2.1  统计信息是如何被收集的?   207

    15.2.2  页采样   208

    15.2.3  事务隔离级别   209

    15.2.4  配置统计信息类型   209

    15.3  持久索引统计信息   209

    15.3.1  配置   210

    15.3.2  索引统计信息表   211

    15.4  临时索引统计信息   214

    15.5  监控   215

    15.5.1  information库中的STATISTICS视图   215

    15.5.2  SHOW INDEX 语句   217

    15.5.3  information库中的INNODB_TABLESTATS视图   219

    15.5.4  information库中的TABLES视图及SHOW TABLE STATUS语句   220

    15.6  更新统计信息   223

    15.6.1  自动更新   223

    15.6.2  ANALYZE TABLE语句   224

    15.6.3  mysqlcheck程序   225

    15.7  本章小结   227

    第16章  直方图   229

    16.1  何为直方图?   229

    16.2  何时应该添加直方图信息?   230

    16.3  直方图内部信息   231

    16.3.1  bucket   231

    16.3.2  累积频率   232

    16.3.3  直方图类型   234

    16.4  直方图的添加与维护   236

    16.4.1  直方图的创建与更新   236

    16.4.2  采样   237

    16.4.3  删除直方图   238

    16.5  查看直方图数据   238

    16.6  直方图报告示例   239

    16.6.1  列出所有直方图   240

    16.6.2  列出一个直方图的所有信息   240

    16.6.3  列出一个单值直方图的桶信息   241

    16.6.4  列出一个等高直方图的桶信息   243

    16.7  查询示例   244

    16.8  本章小结   247

    第17章  查询优化器   248

    17.1  转换   249

    17.2  基于成本的优化   249

    17.2.1  基础:单表SELECT操作   250

    17.2.2  表联接顺序   251

    17.2.3  默认过滤效果   251

    17.2.4  查询成本   252

    17.3  联接算法   254

    17.3.1  嵌套循环   254

    17.3.2  块嵌套循环   257

    17.3.3  哈希联接   260

    17.4  联接优化   263

    17.4.1  索引合并   263

    17.4.2  多范围读(MRR)   269

    17.4.3  批量key访问(BKA)   270

    17.4.4  其他优化   271

    17.5  配置优化器   274

    17.5.1  引擎成本   275

    17.5.2  服务器成本   275

    17.5.3  优化器开关   277

    17.5.4  优化器提示   278

    17.5.5  索引提示   281

    17.5.6  配置选项   282

    17.6  资源组   282

    17.6.1  获取资源组相关信息   283

    17.6.2  管理资源组   283

    17.6.3  分配资源组   285

    17.6.4  性能考量   286

    17.7  本章小结   287

    第18章  锁原理与监控   288

    18.1  为何会需要锁?   288

    18.2  锁访问级别   289

    18.3  锁粒度   289

    18.3.1  用户级别锁   289

    18.3.2  刷新锁   291

    18.3.3  元数据锁   292

    18.3.4  显式表锁   295

    18.3.5  隐式表锁   295

    18.3.6  记录锁   297

    18.3.7  gap锁、next-key锁以及预测锁   299

    18.3.8  插入意向锁   300

    18.3.9  自增锁   302

    18.3.10  备份锁   302

    18.3.11  日志锁   304

    18.4  获取锁失败   304

    18.4.1  元数据锁和备份锁等待超时   305

    18.4.2  InnoDB锁等待超时   305

    18.4.3  死锁   306

    18.5  减少锁相关的问题   309

    18.5.1  事务大小与期限   309

    18.5.2  索引   309

    18.5.3  记录访问顺序   310

    18.5.4  事务隔离级别   310

    18.5.5  抢占锁   312

    18.6  监控锁   313

    18.6.1  performance库   313

    18.6.2  sys库   314

    18.6.3  状态计数器与InnoDB指标   314

    18.6.4  InnoDB锁监控与死锁日志   315

    18.7  本章小结   318

    第Ⅴ部分  查询分析

    第19章  查找待优化的查询   320

    19.1  performance库   321

    19.1.1  语句事件表   321

    19.1.2  prepared语句的汇总   325

    19.1.3  表的I/O汇总   327

    19.1.4  文件 I/O汇总信息   332

    19.1.5  错误汇总表   334

    19.2  sys库   335

    19.2.1  语句视图   335

    19.2.2  表I/O视图   337

    19.2.3  文件I/O视图   338

    19.2.4  语句性能分析器   340

    19.3  MySQL Workbench   343

    19.3.1  性能报告   344

    19.3.2  客户端连接报告   346

    19.4  MySQL Enterprise Monitor   346

    19.4.1  查询分析器   346

    19.4.2  时间序列图   349

    19.4.3  即席查询报告   350

    19.5  慢查询日志   352

    19.6  本章小结   352

    第20章  分析查询   354

    20.1  EXPLAIN用法   355

    20.1.1  显式查询的用法   355

    20.1.2  EXPLAIN ANALYZE   355

    20.1.3  连接的用法   356

    20.2  EXPLAIN格式   357

    20.2.1  传统格式   358

    20.2.2  JSON格式   359

    20.2.3  树状格式   362

    20.2.4  Visual Explain   364

    20.3  EXPLAIN输出   368

    20.3.1  EXPLAIN字段   368

    20.3.2  选择类型   371

    20.3.3  访问类型   372

    20.3.4  Extra信息   376

    20.4  EXPLAIN示例   377

    20.4.1  单表,全表扫描   378

    20.4.2  单表,索引访问   379

    20.4.3  两张表和覆盖索引   380

    20.4.4  多列索引   381

    20.4.5  两张表并带有子查询和排序   382

    20.5  优化器跟踪   384

    20.6  performance库事件分析   387

    20.6.1  检查存储过程   387

    20.6.2  分析阶段事件   391

    20.6.3  使用sys.ps_trace_thread( )过程进行分析   393

    20.6.4  使用ps_trace_statement_digest( )过程进行分析   396

    20.7  本章小结   400

    第21章  事务   401

    21.1  事务的影响   401

    21.1.1  锁   402

    21.1.2  undo日志   402

    21.2  INNODB_TRX   403

    21.3  InnoDB监视器   406

    21.4  INNODB_METRICS和sys.metrics   407

    21.5  performance库事务   410

    21.5.1  事务事件及其语句   410

    21.5.2  事务汇总表   416

    21.6  本章小结   417

    第22章  诊断锁争用   418

    22.1  刷新锁   419

    22.1.1  症状   419

    22.1.2  原因   419

    22.1.3  构建   420

    22.1.4  调研   420

    22.1.5  解决方案   423

    22.1.6  预防   423

    22.2  元数据锁和方案锁   424

    22.2.1  症状   424

    22.2.2  原因   424

    22.2.3  构建   424

    22.2.4  调研   425

    22.2.5  解决方案   431

    22.2.6  预防   431

    22.3  记录锁   432

    22.3.1  症状   432

    22.3.2  原因   434

    22.3.3  构建   435

    22.3.4  调研   435

    22.3.5  解决方案   436

    22.3.6  预防   437

    22.4  死锁   437

    22.4.1  症状   437

    22.4.2  原因   438

    22.4.3  构建   438

    22.4.4  调研   439

    22.4.5  解决方案   444

    22.4.6  预防   444

    22.5  本章小结   445

    第Ⅵ部分  提升查询性能

    第23章  配置   448

    23.1  实践   448

    23.2  InnoDB综述   451

    23.3  InnoDB缓冲池   452

    23.3.1  缓冲池大小   453

    23.3.2  缓冲池实例   455

    23.3.3  转储缓冲池   455

    23.3.4  旧块子列表   455

    23.3.5  刷新页   457

    23.4  重做日志   458

    23.4.1  日志缓冲区   459

    23.4.2  日志文件   459

    23.5  并行查询执行   461

    23.6  查询缓冲区   462

    23.7  内部临时表   463

    23.8  本章小结   465

    第24章  改变查询计划   466

    24.1  测试数据   466

    24.2  出现过多全表扫描的症状   467

    24.3  错误查询   468

    24.4  未使用索引   470

    24.4.1  不在多列索引的靠左位置   471

    24.4.2  数据类型不匹配   473

    24.4.3  函数依赖   476

    24.5  改善索引的使用情况   478

    24.5.1  添加覆盖索引   479

    24.5.2  错误索引   480

    24.5.3  重写复杂索引条件   487

    24.6  重写复杂查询   488

    24.6.1  公共表表达式(CTE)   489

    24.6.2  窗口函数   493

    24.6.3  使用联接来重写子查询   494

    24.6.4  将查询拆分为多个部分   495

    24.7  队列系统:SKIP LOCKED   496

    24.8  多个OR或者IN条件   498

    24.9  本章小结   502

    第25章  DDL与批量数据加载   504

    25.1  方案更改   505

    25.1.1  算法   505

    25.1.2  其他考量   506

    25.1.3  删除或者截断表   506

    25.2  数据加载的一般性考量   507

    25.3  以主键顺序插入   516

    25.3.1  自增长主键   516

    25.3.2  插入已有数据   517

    25.3.3  UUID主键   518

    25.4  InnoDB缓冲池与二级索引   519

    25.5  配置   521

    25.6  事务与加载方式   522

    25.7  MySQL shell并行数据加载   522

    25.8  本章小结   524

    第26章  复制   526

    26.1  复制概述   527

    26.2  监控   528

    26.2.1  连接表   529

    26.2.2  applier表   531

    26.2.3  日志状态   533

    26.2.4  组复制表   534

    26.3  连接   534

    26.3.1  复制事件   534

    26.3.2  网络   535

    26.3.3  维护源信息   536

    26.3.4  写入中继日志   536

    26.4  applier线程   536

    26.4.1  并行applier   537

    26.4.2  主键   538

    26.4.3  放宽数据安全   538

    26.4.4  复制过滤器   539

    26.5  将工作负载卸载到副本   540

    26.5.1  读操作的横向扩展   540

    26.5.2  任务分离   540

    26.6  本章小结   541

    第27章  缓存   542

    27.1  缓存,无处不在   542

    27.2  MySQL中的缓存   543

    27.2.1  缓存表   543

    27.2.2  直方图统计信息   545

    27.3  Memcached   546

    27.3.1  独立服务器模式下的Memcached   547

    27.3.2  MySQL InnoDB Memcached插件   549

    27.4  ProxySQL   552

    27.5  缓存技巧   558

    27.6  本章小结   559
查看详情
12
相关图书 / 更多
MySQL 8查询性能优化
MySQL是怎样使用的 快速入门MySQL
小孩子4919
MySQL 8查询性能优化
MySQL数据库应用与管理 第2版
鲁大林
MySQL 8查询性能优化
MySQL数据库设计与应用
肖宏启、杨丰嘉、柳均 著
MySQL 8查询性能优化
MySQL数据库基础与应用教程(微课版计算机系列教材)
郎振红、曹志胜 编
MySQL 8查询性能优化
MySQL从入门到精通(第2版)
明日科技
MySQL 8查询性能优化
MySQL数据库技术应用教程
单光庆 主编;李咏霞 副主编;刘张榕;张校磊;葛建霞;刘秀娟;张宝峰;参编:刘晓洪;冯川放
MySQL 8查询性能优化
MySQL数据库应用、设计与管理任务驱动教程(微课版)
陈承欢 汤梦姣
MySQL 8查询性能优化
MySQL数据库实用教程()
任丽娜、姚茂宣、邓文艳 著
MySQL 8查询性能优化
MySQL数据库项目化教程(第二版)()
郑小蓉 著;郑小蓉 编
MySQL 8查询性能优化
MySQL数据库项目实践教程(微课版)
潘育勤 副主编;韦霞 罗宁主编聂振传;曾庆毅;陈美其
MySQL 8查询性能优化
MySQL数据库任务驱动式教程(第2版)(微课版)
石坤泉 汤双霞
MySQL 8查询性能优化
MySQL数据库技术及其医学应用
朱高红 著;王廷华、熊柳林、王廷华、熊柳林、朱高红 编
您可能感兴趣 / 更多
MySQL 8查询性能优化
单身偏见
[澳]克莱尔·佩恩 著;张林 译;未读 出品
MySQL 8查询性能优化
淘气小子马克斯 冰球风云(玩转校园生活,掌握成长密码。国外版“马小跳”“米小圈”比《小屁孩日记》更好玩)
[澳]马特·斯坦顿 著;刘勇军 译;白马时光 出品
MySQL 8查询性能优化
淘气小子马克斯 超级英雄(玩转校园生活,掌握成长密码。国外版“马小跳”“米小圈”比《小屁孩日记》更好玩)
[澳]马特·斯坦顿 著;刘勇军 译;白马时光 出品
MySQL 8查询性能优化
基于人工智能方法的网络空间安全
[澳]莱斯利·F. 西科斯(Leslie F. Sikos)
MySQL 8查询性能优化
淘气小子马克斯 勇敢者游戏(玩转校园生活,掌握成长密码。国外版“马小跳”“米小圈”比《小屁孩日记》更好玩)
[澳]马特·斯坦顿 著;刘勇军 译;白马时光 出品
MySQL 8查询性能优化
越动越聪明(大教育书系·2021新版)
[澳]玛格丽特·萨瑟 著;杨淼 唐大旻 译;[澳]乔治·麦凯尔 绘
MySQL 8查询性能优化
淘气小子马克斯 泳池对决(玩转校园生活,掌握成长密码。国外版“马小跳”“米小圈”比《小屁孩日记》更好玩)
[澳]马特·斯坦顿 著;刘勇军 译;白马时光 出品
MySQL 8查询性能优化
激励变革:建成环境中的可持续设计与行为
[澳]罗伯特·克罗克(Robert Crocker) 著;侯海燕、邓小渠 译
MySQL 8查询性能优化
安全归约导论
[澳]穆怡 著;郭福春、[澳]威利苏西洛、蒋芃、祝烈煌 译
MySQL 8查询性能优化
金魔方英语分级读物(第二级上)(点点灯火)(外研社英语分级阅读)
[澳]卡梅尔·赖莉(Carmel Reilly)
MySQL 8查询性能优化
金魔方英语分级读物(第五级上)(点点灯火)(外研社英语分级阅读)
[澳]卡梅尔·赖莉(Carmel Reilly)
MySQL 8查询性能优化
金魔方英语分级读物(第一级下)(点点灯火)(外研社英语分级阅读)
[澳]卡梅尔·赖莉(Carmel Reilly)