第1章 安装、配置SQL Server 1
1.1 SQL Server概述 1
1.1.1 简介 1
1.1.2 发展历史 1
1.2 SQL Server安装 2
1.2.1 硬件准备与性能 2
1.2.2 操作系统的选择 3
1.3 SQL Server配置 4
1.3.1 配置管理器 4
1.3.2 数据库实例配置 5
1.4 小结 6
第2章 影响SQL Server性能的因素 7
2.1 服务器硬件 8
2.1.1 内存 8
2.1.2 CPU 8
2.1.3 磁盘I/O 9
2.1.4 网络带宽 9
2.2 SQL Server版本对性能的限制 10
2.3 SQL Server系统的配置 10
2.3.1 内存配置 10
2.3.2 CPU配置 11
2.3.3 I/O及数据文件配置 11
2.4 数据库结构的设计 12
2.4.1 好的性能出自好的设计 12
2.4.2 约束对性能的影响 12
2.4.3 适当的冗余 13
2.5 T-SQL语句的编写 13
2.5.1 编写T-SQL语句的注意事项及小窍门 13
2.5.2 使用简单SQL语句 14
2.6 小结 14
第3章 T-SQL与性能调优 15
3.1 编写健壮的T-SQL语句 15
3.2 使用查询语句 17
3.2.1 SELECT语句 17
3.2.2 SELECT语句的性能 18
3.3 使用排序子句 19
3.3.1 排序子句 19
3.3.2 排序的性能影响 19
3.3.3 排序对Tempdb的影响 20
3.4 使用T-SQL汇总 21
3.4.1 GROUPBY 21
3.4.2 DISTINCT 22
3.4.3 GROUPBY与性能 22
3.5 UPDATE语句 22
3.5.1 UPDATE 23
3.5.2 UPDATE语句与事务影响 23
3.6 DELETE语句 25
3.6.1 DELETE、TRUNCATE TABLE 25
3.6.2 删除操作与事务日志 26
3.7 使用过滤条件(wHERE子句) 26
3.7.1 合理优化因素 26
3.7.2 合理利用索引 27
3.8 连接查询 27
3.8.1 连接类型 27
3.8.2 认识连接操作 28
3.9 子查询 30
3.9.1 子查询与性能 31
3.9.2 IN、EXISTS与LEFT JOIN的性能对比 31
3.9.3 FOR XML子句 32
3.10 批量更新数据 34
3.10.1 BULK...INSERT 34
3.10.2 INSERT...SELECT 34
3.10.3 SELECT...INTO 35
3.10.4 OUTPUT子句 35
3.10.5 MERGE 36
3.10.6 BCP工具 36
3.11 运行时动态管理视图 36
3.12 小结 37
第4章 SQL Server的内存管理 38
4.1 Windows的内存管理 38
4.1.1 32位操作系统 39
4.1.2 64位操作系统 41
4.2 SQL Server的内存管理 41
4.2.1 SQLOS内存管理组件 41
4.2.2 内存中的数据 44
4.3 诊断内存瓶颈 46
4.3.1 资源管理器诊断示例 48
4.3.2 性能计数器诊断示例 48
4.4 案例分析 49
4.4.1 案例一:内存不足造成的磁盘超负荷 49
4.4.2 案例二:内存不足的信号(RESOURCE_SEMAPHORE) 50
4.5 小结 53
第5章 SQL Server的任务调度 54
5.1 任务调度者 54
5.2 工作者 55
5.3 任务 57
5.4 任务调度与资源等待 58
5.5 CPU性能监控及示例 61
5.5.1 使用动态管理视图诊断 61
5.5.2 使用性能计数器诊断 62
5.5.3 MDW 63
5.6 小结 65
第6章 SQL Server执行计划分析 66
6.1 查看执行计划 66
6.2 查询优化器与执行计划的选择 70
6.2.1 统计信息 71
6.2.2 统计信息与执行计划(示例详解) 74
6.3 常用的执行计划操作符 75
6.3.1 数据访问操作符 76
6.3.2 关联操作符 79
6.3.3 聚合操作符 83
6.4 执行计划缓存及重编译 86
6.4.1 语句级别的重编译 87
6.4.2 导致重编译的因素 87
6.4.3 监视和解决重编译问题 88
6.5 执行计划实践 88
6.5.1 案例一(参数嗅探) 88
6.5.2 案例二(疯狂的重编译) 93
6.6 小结 95
第7章 索引 96
7.1 索引概念 97
7.1.1 什么是索引 97
7.1.2 索引的类型 97
7.1.3 特殊的索引 98
7.2 索引的物理结构 99
7.2.1 基本概念 99
7.2.2 查看文件存储格式的几种方法 103
7.2.3 RID的物理结构 110
7.2.4 UNIQUIFIER物理结构 117
7.2.5 堆表行记录的物理结构 129
7.2.6 堆表非聚集索引的物理结构 149
7.2.7 聚集索引的物理结构 185
7.2.8 非聚集索引的物理结构 191
7.2.9 NULL位图物理结构 197
7.2.10 行溢出物理结构 203
7.2.11 LOB的物理结构 209
7.3 索引的选择 229
7.3.1 覆盖索引 230
7.3.2 索引的分析 231
7.4 查看缺失的索引 238
7.4.1 执行计划中查看缺失索引 238
7.4.2 查看所有缺失索引的字段 238
7.5 查看无效索引 240
7.6 案例分析:统计信息失效 240
7.7 小结 243
第8章 锁、事务与性能 244
8.1 锁、事务要解决的问题 244
8.2 事务的控制 249
8.3 锁粒度 250
8.4 锁模式 250
8.5 锁兼容性 251
8.6 阻塞、死锁及性能优化 253
8.7 锁的监控 255
8.7.1 与锁相关的性能计数器 255
8.7.2 锁相关的动态管理视图简介 256
8.7.3 SQLProfiler 256
8.7.4 死锁标记 256
8.8 轻量级锁闩锁 259
8.8.1 闩锁模式 259
8.8.2 闩锁的兼容性 260
8.8.3 查看闩锁 260
8.9 自定义事务报警 262
8.9.1 阻塞报警 262
8.9.2 死锁报警 264
8.10 小结 265
第9章 理解和使用Tempdb 266
9.1 Tempdb的工作 266
9.2 表变量、临时表 267
9.2.1 统计信息 269
9.2.2 临时表和表变量的索引 269
9.2.3 表结构修改 270
9.3 Tempdb的并发阻塞 270
9.4 监视Tempdb 274
9.4.1 性能计数器 274
9.4.2 动态管理视图 274
9.5 小结 275
第10章 SQL Server数据库性能监控 276
10.1 SQL Profiler/Trace 276
10.1.1 选择跟踪模板 276
10.1.2 选择跟踪事件 278
10.1.3 过滤跟踪 279
10.2 Data Collector与MDW 280
10.2.1 MDW的配置 280
10.2.2 查看性能报表 281
10.3 性能监控的性能计数器 284
10.4 扩展事件 285
10.5 小结 288
第11章 SQLServer数据库企业级配置与性能 289
11.1 数据库表的配置 289
11.1.1 数据压缩 289
11.1.2 分区表和分区视图 290
11.2 高可用性解决方案 290
11.2.1 企业数据库发展阶段 290
11.2.2 业务功能的数据同步 293
11.3 小结 298