目录 1
译者的话 1
前言 1
第1章 建立优化测试环境 1
1.1 测试前应遵循的步骤 1
1.1.1 硬件因素 1
1.1.2 软件因素 2
1.1.3 数据因素 2
1.1.4 制定测试计划 2
1.1.5 操作因素 4
1.2 测试过程中应遵循的步骤 5
1.3 测试后应遵循的步骤 6
1.3.1 正式评估 6
1.3.2 确定下一步骤 6
第1部分 创建一个设计优良的数据库 10
第2章 规范化设计 10
2.1 第一范式 10
2.2 第二范式 10
2.3 第三范式 12
2.4 何时不用规范化 13
2.4.1 计算值 13
2.4.2 历史信息 14
2.4.3 分区 15
2.5 特殊数据类型 16
2.5.1 变长度字符串 16
2.5.2 变长度二进制数据 19
2.5.3 文本和图形 19
2.6 约束 23
2.6.1 主关键字约束 25
2.6.1.1 标识属性 28
2.6.1.2 标识初值 29
2.6.1.3 标识增量 30
2.6.1.4 TIMESTAMP 31
2.6.2 外关键字约束 32
2.6.3 唯一性约束 34
2.6.4 检验约束 34
2.6.5 规则 37
2.6.6 缺省值 37
2.7 用户自定义数据类型 39
2.7.1 ANSI规范和SQL Server 45
2.7.2 禁止约束 47
2.8 使用视图 48
2.9 依赖 50
第3章 检索策略 53
3.1.1 簇式索引 54
3.1 索引结构 54
3.1.2 非簇式索引 56
3.1.3 叶子页与非叶子页 56
3.2 主关键字 57
3.3 筛选列 59
3.4 连接列 61
3.5 宽索引关键字与窄索引关键字 63
3.6 唯一索引和非唯一索引 65
3.7 字符索引和数值索引 65
3.8 复合索引问题 66
3.9 避免高度重复索引 69
3.10 簇式索引和已预排序的数据 71
3.11 簇式索引和数据重组 71
3.12 排序列 71
3.13 索引和特殊数据类型 73
3.14 索引与工作表 74
3.15 多余的索引 76
3.16 索引填充因子 77
3.17 索引存放位置 81
4.2 优化器的特征和算法 83
4.3 优化器性能诊断 83
4.1 什么是优化器 83
第4章 了解Microsoft SQL Server优化器 83
4.3.1 使用SHOWPLAN 84
4.3.2 关于SHOWPLAN的一些论题 90
4.4 编程考虑 116
4.4.1 给优化器以提示 117
4.4.2 查询处理选项 126
4.5 UPDATE STATISTICS命令 128
第2部分 改善数据库访问 131
第5章 SQL技巧 131
5.1.1 标准连接 132
5.1 连接的类型 132
5.1.2 交叉连接 133
5.1.3 内连接 133
5.1.4 左外连接 133
5.1.5 右外连接 134
5.1.6 全外连接 135
5.1.7 数值型与非数值型连接和搜索 136
5.2 SQL批处理 138
5.3 CASE表达式 139
5.3.1 COALESCE函数 141
5.3.2 NULLIF函数 142
5.4 子字符串搜索 142
5.5.2 全局临时表 145
5.5.1 局部临时表 145
5.5 临时表和工作表 145
5.5.3 隐式工作表 146
5.5.4 显式临时表 146
5.5.5 改善临时表的性能 147
5.6 子查询 148
5.7 视图(VIEW)开销 149
5.8 在SQL中使用数学运算 152
5.9 联合(UNION) 154
5.10 排序(SORTING) 156
5.11 上卷(ROLLUP) 159
5.12 CUBE 161
5.13 从存储过程中插入 163
5.14 插入和缺省值 164
5.15 更新扩展 164
5.16 多表删除 165
5.17 大规模删除操作 165
第6章 存储过程和触发器 167
6.1 存储过程 167
6.1.1 创建和维护存储过程 167
6.1.2 为什么使用存储过程 170
6.1.3 经常用到的例程 170
6.1.4 自动启动存储过程 172
6.1.5 扩展的存储过程 174
6.1.6 客户/服务器 178
6.1.7 安全性 178
6.1.8 改善存储过程的性能 180
6.1.9 重新编译存储过程 180
6.2 触发器 181
6.2.1 检验跟踪 181
6.2.2 数据复制 182
6.2.3 级联删除 182
7.1 事务 184
第7章 一般技巧 184
7.1.1 事务和数据定义语言(DDL) 185
7.1.2 嵌套事务 186
7.1.3 保存点 188
7.1.4 避免长事务 189
7.1.5 什么时候不用事务 190
7.1.6 BEGIN TRANSACTION和COMMIT TRANSACTION的位置 191
7.1.7 向已有的应用程序中加入事务 192
7.1.8 事务日志和文字/图形 192
7.1.9 隐式事务 193
7.1.10 事务放弃控制 195
7.1.11 分布式事务 195
7.1.12 错误检查 198
7.2 游标 202
7.2.1 服务器游标 202
7.2.2 不灵敏游标选项 204
7.2.3 可滚动游标 205
7.2.4 只读游标 206
7.2.5 利用游标检测数据的改变 206
7.2.6 更新 208
7.2.7 游标释放 209
7.3 并发性 209
7.3.1 锁问题 210
7.3.2 避免锁溢出 212
7.3.3 事务隔离级别 213
7.4 其余技巧 223
第8章 客户/服务器研究 226
8.1 评估网络能力 226
8.2 最小化网络通信量 226
8.2.1 改善分布式查询 226
8.2.2 利用复制 226
8.2.3 只读取必要的列 227
8.2.4 用连接代替顺序的SELECTS 227
8.2.5 利用存储过程 229
8.2.6 只选择必要的行 229
8.3 调试网络 230
8.2.7 只更新改变的列 230
8.4 客户/服务器连接的持续 231
第3部分 优化SQL Server引擎 233
第9章 监控工具 233
9.1 使用性能监视器 233
9.1.1 对象 234
9.1.2 设置警报 234
9.1.3 登录 235
9.1.4 报告 237
9.2 sp_monitor 237
9.3 数据库一致性检查工具(DBCC) 238
9.4 跟踪标志 239
9.5 sp_configure 241
9.6 SQL Trace 243
9.7 全局变量 247
9.7.1 @@CONNECTION 248
9.7.2 @@CPU_BUSY 248
9.7.3 @@CURSOR_ROWS 248
9.7.4 @@DATEFIRST 248
9.7.5 @@DBTS 249
9.7.6 @@ERROR 249
9.7.10 @@IO_BUSY 250
9.7.9 @@IDEL 250
9.7.7 @@FETCH_STATUS 250
9.7.8 @@IDENTITY 250
9.7.11 @@LANGID 251
9.7.12 @@LANGUAGE 251
9.7.13 @@MAX_CONNECTIONS 251
9.7.14 @@MAX_PRECISION 251
9.7.15 @@MICROSOFTVERSION 251
9.7.16 @@NESTLEVEL 251
9.7.17 @@OPTIONS 252
9.7.18 @@PACK_RECEIVED 253
9.7.21 @@PROCID 254
9.7.20 @@PCAKET_ERRORS 254
9.7.19 @@PACK_SENT 254
9.7.22 @@REMSERVER 255
9.7.23 @@ROWCOUNT 255
9.7.24 @@SERVERNAME 255
9.7.25 @@SERVICENAME 255
9.7.26 @@SPID 256
9.7.27 @@TEXTSIZE 256
9.7.28 @@TIMETICKS 256
9.7.33 @@VERSION 257
9.7.32 @@TRANCOUNT 257
9.7.31 @@TOTAL_WRITE 257
9.7.29 @@TOTAL_ERRORS 257
9.7.30 @@TOTAL_READ 257
第10章 Windows NT网络操作系统集成 258
10.1 机器问题 258
10.1.1 CPU 258
10.1.2 内存 258
10.1.3 磁盘驱动器 258
10.4 配置选项 259
10.4.1 可交换文件 259
10.3 性能监视器 259
10.2 专用服务器和非专用服务器 259
10.4.2 优先级的增加 260
10.4.3 服务器任务 260
第11章 磁盘管理 261
11.1 磁盘存储概念 261
11.1.1 页 261
11.1.2 盘区 261
11.1.3 分配单元 261
11.1.4 设备 261
11.1.5 数据库 264
11.1.6 物理名 264
11.2.1 RAID 265
11.2 磁盘存储选项 265
11.1.7 逻辑名 265
11.2.2 操作系统磁盘条带化 266
11.2.3 镜像 267
11.2.4 段 269
11.2.5 文件系统类型 269
11.3 DBCC工具与磁盘信息 270
11.3.1 CHECKALLOC 270
11.3.2 CHECKCATALOG 271
11.3.3 CHECKTABLE 271
11.3.4 CHECKDB 272
11.3.5 CHECKIDENT 273
11.3.6 DBREINDEX 273
11.3.7 DBREPAIR 274
11.3.8 NEWALLOC 274
11.3.9 SHOW_STATISTICS 276
11.3.10 SHOWCONTIG 277
11.3.11 SHRINKDB 277
11.3.12 TEXTALLOC 278
11.3.13 TEXTALL 279
11.3.14 UPDATEUSAGE 279
11.4.1 磁盘碎片 280
11.4 碎片 280
11.4.2 数据库碎片 281
11.5 sp_spaceused存储过程 282
11.6 索引填充因子 283
11.7 I/O主题 283
11.7.1 异步I/O 283
11.7.2 惰性写 284
11.7.3 优先读 284
11.7.4 统计信息 286
11.7.5 举例 288
11.8 在RAM中存储tempdb 291
11.7.6 配置参数 291
第12章 引擎参数 293
12.1 内存 293
12.1.1 设置内存参数 293
12.1.2 数据缓存 293
12.1.3 存储过程高速缓存 300
12.2 锁 303
12.2.1 锁定义 303
12.2.2 锁对象 304
12.2.3 配置参数 310
12.3 线程 313
12.3.1 Windows NT线程对象 313
12.3.2 多处理器研究 316
12.4.1 描述事务日志 317
12.4 日志 317
12.4.2 改变事务日志大小 320
12.4.3 放置事务日志 323
12.4.4 监视日志使用情况 324
12.4.5 转储事务日志 325
12.4.6 截断事务日志 327
12.4.7 使用检查点 328
12.4.9 事务日志和镜像 330
12.4.10 SQL Server日志对象 330
12.4.8 管理日志的使用 330
12.5 DBCC工具与引擎信息 334
12.5.1 MEMUSAGE 334
12.5.2 OPENTRAN 337
12.5.3 PERFMON 338
12.5.4 PINTABLE 338
12.5.5 UNPINTABLE 339
12.5.6 FROCCACHE 339
12.5.7 ROWLOCK 339
12.5.8 SQLPERF 340
12.5.9 USEROPTIONS 342
13.1 sp_helpdb 344
第13章 数据库参数与用户配置 344
13.2 多个小数据库和单个大数据库 345
13.3 直接更改系统表 345
13.4 开放数据库的数量 346
13.5 开放对象的数量 346
13.6 存储过程缓冲 346
13.10 恢复间隔 347
13.11 控制用户连接 347
13.12 SELECT INTO/大块拷贝 347
13.9 数据库大小 347
13.8 数据库优先读高速缓冲 347
13.7 为加载创建(CREATE FOR LOAD) 347
13.13 仅为DBO使用 348
13.14 在恢复时无检验点 348
13.15 只读 348
13.16 单用户 349
13.17 缺省空列 349
13.18 在检验点截断日志 349
13.19 用户配置和管理 350
13.19.1 SQL Server用户对象 350
13.19.2 统计信息 350
13.19.3 例子 351
14.2 配制 354
14.2.1 打包大小设定 354
14.1.3 NET——每秒的网络写操作 354
14.2.2 远程访问 354
第14章 网络参数 354
14.1.1 NET——命令队列长度 354
14.1 统计量 354
14.1.2 NET——每秒的网络读操作 354
14.2.3 远程登录时间溢出 355
14.2.4 远程查询时间溢出 355
14.3 SQL Server用户自定义计数器对象 356
第15章 SQL Enterprise Manager 358
15.1 术语介绍 358
15.2 实例 358
16.2.1 报表 363
16.2.2 分发信息 363
第16章 高效复制 363
16.2 为什么要复制 363
16.1 什么是复制 363
16.2.3 只读数据 364
16.3 复制概念 364
16.3.1 紧凑一致性 364
16.3.2 松散一致性 364
16.3.7 分布数据库 365
16.3.6 订阅者 365
16.3.4 文章(条目) 365
16.3.5 出版物 365
16.3.3 数据出版 365
16.3.8 日志阅读进程 368
16.3.9 同步进程 368
16.3.10 分发进程 368
16.4 SQL Server复制—出版DB对象 368
16.4.1 统计 368
16.5 SQL Server复制—订阅对象 368
16.6 复制储存过程 369
16.7 高效复制 370
16.7.1 复制拓扑计划 371
16.7.2 事务日志 371
16.7.3 内存 371
16.7.4 控制出版数据的总量 372
16.7.5 主关键字 372
16.7.6 外关键字 372
16.7.7 控制发行的数量 372
附录A 事例分析 373
附录B SQL Replay 1.10 392