目录
第1章 SQL编程
1.1 MySQL数据库
1.1.1 MySQL数据库历史
1.1.2 MySQL数据库的分支版本
1.2 SQL编程
1.3 数据库的应用类型
1.3.1 OLTP
1.3.2 OLAP
1.3.3 OLTP与OLAP的比较
1.3.4 MySQL存储引擎及其面向的数据库应用
1.4 图形化的SQL查询分析器
1.4.1 MySQL Workbench
1.4.2 Toad for MySQL
1.4.3 iMySQL-Front
1.5 小结
第2章 数据类型
2.1 类型属性
2.1.1 UNSIGNED
2.1.2 ZEROFILL
2.2 SQL_MODE设置
2.3 日期和时间类型
2.3.1 DATETIME和 DATE
2.3.2 TIMESTAMP
2.3.3 YEAR和TIME
2.3.4 与日期和时间相关的函数1
2.4 关于日期的经典SQL编程问题
2.4.1 生日问题
2.4.2 重叠问题
2.4.3 星期数的问题
2.5 数字类型
2.5.1 整型
2.5.2 浮点型(非精确类型)
2.5.3 高精度类型
2.5.4 位类型
2.6 关于数字的经典SQL编程问题
2.6.1 数字辅助表
2.6.2 连续范围问题
2.7 字符类型
2.7.1 字符集
2.7.2 排序规则
2.7.3 CHAR和VARCHAR
2.7.4 BINARY和VARBINARY
2.7.5 BLOB和TEXT
2.7.6 ENUM和SET类型
2.8 小结
第3章 查询处理
3.1 逻辑查询处理
3.1.1 执行笛卡儿积
3.1.2 应用ON过滤器
3.1.3 添加外部行
3.1.4 应用WHERE过滤器
3.1.5 分组
3.1.6 应用ROLLUP或CUBE
3.1.7 应用HAVING过滤器
3.1.8 处理SELECT列表
3.1.9 应用DISTINCT子句
3.1.10 应用ORDER BY子句
3.1.11 LIMIT子句
3.2 物理查询处理
3.3 小结
第4章 子查询
4.1 子查询概述
4.1.1 子查询的优点和限制
4.1.2 使用子查询进行比较
4.1.3 使用ANY、IN和SOME进行子查询
4.1.4 使用ALL进行子查询
4.2 独立子查询
4.3 相关子查询
4.4 EXISTS谓词
4.4.1 EXISTS
4.4.2 NOT EXISTS
4.5 派生表
4.6 子查询可以解决的经典问题
4.6.1 行号
4.6.2 分区
4.6.3 最小缺失值问题
4.6.4 缺失范围和连续范围
4.7 MariaDB对SEMI JOIN的优化
4.7.1 概述
4.7.2 Table Pullout优化
4.7.3 Duplicate Weedout 优化
4.7.4 Materialization优化
4.8 小结
第5章 联接与集合操作
5.1 联接查询
5.1.1 新旧查询语法
5.1.2 CROSS JOIN
5.1.3 INNER JOIN
5.1.4 OUTER JOIN
5.1.5 NATURAL JOIN
5.1.6 STRAIGHT_JOIN
5.2 其他联接分类
5.2.1 SELF JOIN
5.2.2 NONEQUI JOIN
5.2.3 SEMI JOIN和ANTI SEMI JOIN
5.3 多表联接
5.4 滑动订单问题
5.5 联接算法
5.5.1 Simple Nested-Loops Join算法
5.5.2 Block Nested-Loops Join算法
5.5.3 Batched Key Access Join算法
5.5.4 Classic Hash Join算法
5.6 集合操作
5.6.1 集合操作的概述
5.6.2 UNION DISTINCT和UNION ALL
5.6.3 EXCEPT
5.6.4 INTERSECT
5.7 小结
第6章 聚合和旋转操作
6.1 聚合
6.1.1 聚合函数
6.1.2 聚合的算法
6.2 附加属性聚合
6.3 连续聚合
6.3.1 累积聚合
6.3.2 滑动聚合
6.3.3 年初至今聚合
6.4 Pivoting
6.4.1 开放架构
6.4.2 关系除法
6.4.3 格式化聚合数据
6.5 Unpivoting
6.6 CUBE 和 ROLLUP
6.6.1 ROLLUP
6.6.2 CUBE
6.7 小结
第7章 游标
7.1 面向集合与面向过程的开发
7.2 游标的使用
7.3 游标的开销
7.4 使用游标解决问题
7.4.1 游标的性能分析
7.4.2 连续聚合
7.4.3 最大会话数
7.5 小结
第8章 事务编程
8.1 事务概述
8.2 事务的分类
8.3 事务控制语句
8.4 隐式提交的SQL语句
8.5 事务的隔离级别
8.6 分布式事务编程
8.7 不好的事务编程习惯
8.7.1 在循环中提交
8.7.2 使用自动提交
8.7.3 使用自动回滚
8.8 长事务
8.9 小结
第9章 索引
9.1 缓冲池、顺序读取与随机读取
9.2 数据结构与算法
9.2.1 二分查找法
9.2.2 二叉查找树和平衡二叉树
9.3 B+树
9.3.1 B+树的插入操作
9.3.2 B+树的删除操作
9.4 B+树索引
9.4.1 InnoDB B+树索引
9.4.2 MyISAM B+树索引
9.5 Cardinality
9.5.1 什么是Cardinality
9.5.2 InnoDB存储引擎怎样统计Cardinality
9.6 B+树索引的使用
9.6.1 不同应用中B+树索引的使用
9.6.2 联合索引
9.6.3 覆盖索引
9.6.4 优化器选择不使用索引的情况
9.6.5 INDEX HINT
9.7 Multi-Range Read
9.8 Index Condition Pushdown
9.9 T树索引
9.9.1 T树概述
9.9.2 T树的查找、插入和删除操作
9.9.3 T树的旋转
9.10 哈希索引
9.10.1 散列表
9.10.2 InnoDB存储引擎中的散列算法
9.10.3 自适应哈希索引
9.11 小结
第10章 分区
10.1 分区概述
10.2 分区类型
10.2.1 RANGE分区
10.2.2 LIST分区
10.2.3 HASH分区
10.2.4 KEY分区
10.2.5 COLUMNS分区
10.3 子分区
10.4 分区中的NULL值
10.5 分区和性能
10.6 在表和分区间交换数据
10.7 小结