具体描述
本书全面深入地介绍了Microsoft SQL Server 2008中高级T-SQL查询、性能优化等方面的内容,以及SQL Server 2008新增加的一些特性。主要内容包括SQL的基础理论、查询优化、查询算法及复杂度,以及在使用子查询、表表达式、排名函数、数据聚合和透视转换、TOP和APPLY、数据修改、分区表、特殊数据结构等实际应用时会遇到的各种高级查询问题和解决方案。
作为一本讲述T-SQL高级查询的专业图书,本书旨在结合实践中的各种常见问题,教读者如何用SQL作为语言工具来思考问题,揭示基于集合查询的强大威力。本书内容丰富、文字简洁明快,列举的实例具有一定的难度,而且实用性很强,可以把它们作为解决实际问题的标准模式。阅读本书,可以充分地理解T-SQL语言和良好的编程实践,学会如何编写更加有效而强大的查询语句。
本书适合有经验的程序员和DBA阅读,是在SQL Server 2008中编写和优化SQL查询的必备参考图书。
作者简介
Itzik Ben-Gan
Itzik Ben-Gan是Solid Quality Mentors的首席顾问和创始人。他从1999年以来一直是SQL Server方面的Microsoft MVP(最有价值的专业人员)。Itzik在世界各地从事T-SQL查询、查询优化和编程相关的培训工作。Itzik是几本关于T-SQL图书的作者。他为SQL Server Magazine和MSDN撰写过很多文章,在许多业界的专题会议上发表演讲,包括Tech Ed、DevWeek、PASS和SQL Server Magazine Connections。
Lubor Kollar
Lubor Kollar 是微软公司的集团项目经理(Group Program Manager)。从1996年以来,他一直从事SQL Server的开发组织。在加入微软之前,他在IBM开发过各种DB2引擎。目前,Lubor正在领导SQL Server Customer Advisory Team(SQL CAT)从事世界范围内最具挑战性的SQL Server开发。SQL CAT负责维持客户和SQL Server新版本发行之间的密切联系。SQL CAT的另一个主要目标是传播从最先进的SQL Server开发中学习到的智慧。公众接触SQL CAT的一个主要渠道是Web网站www.sqlcat.com。
Dejan Sarka
Dejan Sarka主要从事数据库和商业智能应用方面的开发。除了做项目,他把大约一半的时间都用于教学和咨询工作。他经常在一些最重要的国际会议上发表演讲,包括PASS、TechEd和SqlDevCon。他也是微软一些区域性事件中不可或缺的人物,例如NT Conference(微软在中东欧最大的会议)。他是Slovenian SQL Server和.NET User Group的创始人。Dejan是7本关于数据库和SQL Server图书的主要作者、合著者或客串作者。 Dejan也讲授Solid Quality learning的两门课程:Data Modeling Essentials 和 Data Mining with SQL Server 2008。
Steve Kass
Steve Kass是University of Wisconsin 大学毕业的数学专业的博士,目前是Drew University大学数学系和计算机系的教授,从1988年以来一直从事教学。他于2002年成为SQL Server Microsoft MVP,为SQL Server Magazine撰写文章,在SQL Server Magazine Connections上发表演讲,是New York City区域的用户组成员。Steve已经在Complex Systems 和 the Journal of Algebra上发表过一些数学论文。
目录信息
Table of Contents
序言 I
致谢 III
前言 V
第1章 逻辑查询处理 1
1.1 逻辑查询处理的各个阶段 2
1.1.1 逻辑查询处理阶段简介 2
1.2 客户/订单场景下的查询示例 4
1.3 逻辑查询处理阶段详解 5
1.3.1 步骤1:FROM阶段 5
1.3.2 步骤2:WHERE阶段 9
1.3.3 步骤3:GROUP BY阶段 10
1.3.4 步骤4:HAVING阶段 11
1.3.5 步骤5:SELECT阶段 12
1.3.6 步骤6:排序用的ORDER BY阶段 13
1.4 逻辑查询处理的深入内容 16
1.4.1 表运算符 16
1.4.2 OVER子句 23
1.4.3 集合运算符 25
1.5 总结 26
第2章 集合论和谓词逻辑 27
2.1 自然语言表述到数学表示的转换 27
2.1.1 严格定义(well-Definedness) 28
2.1.2 相等、恒等和同一性 30
2.1.3 数学命名约定 30
2.1.4 数字 31
2.1.5 上下文 32
2.1.6 函数、参数和变量 33
2.1.7 指令和算法 34
2.2 集合论 34
2.2.1 集合的标记方法 35
2.2.2 集合的严格定义 36
2.2.3 论域 36
2.2.4 真实性 38
2.2.5 罗素悖论(Russell’s Paradox) 40
2.2.6 有序对、元组和笛卡尔积 41
2.2.7 空集 42
2.2.8 集合的特征函数 43
2.2.9 集合的基数(Cardinality) 43
2.2.10 顺序 44
2.2.11 集合运算符 47
2.2.12 集合的划分(Partition) 49
2.2.13 集合论的推广 50
2.3 谓词逻辑 50
2.3.1 编程语言中的逻辑功能 50
2.3.2 命题和谓词 51
2.3.3 排中律 53
2.3.4 与、或、非运算 53
2.3.5 逻辑等价 55
2.3.6 逻辑蕴含 55
2.3.7 量化(Quantification) 56
2.3.8 替代和推广 58
2.4 关系 59
2.4.1 自反性、对称性和传递性 59
2.5 一个实际的应用 60
2.6 总结 63
第3章 关系模型 65
3.1 关系模型简介 65
3.1.1 关系、元组和类型 65
3.1.2 关系模型:快速摘要 70
3.2 关系代数和关系计算 70
3.2.1 基本运算符 71
3.2.2 关系代数 71
3.2.3 关系演算 79
3.2.4 T-SQL支持 80
3.3 数据完整性 81
3.3.1 声明式约束 82
3.3.2 实施完整性的其他方法 84
3.4 数据库正规化和其他设计主题 86
3.4.1 解决函数依赖的范式 87
3.4.2 更高级的范式 92
3.4.3 反规范化(Denormalization) 95
3.4.4 一般化和特殊化 96
3.5 总结 98
第4章 查询优化 99
4.1 本章用到的样本数据 99
4.2 优化方法论 102
4.2.1 分析实例级别的等待 104
4.2.2 关联等待和队列 111
4.2.3 确定行动方案 112
4.2.4 细化到数据库/文件级别 113
4.2.5 细化到进程级别 115
4.2.6 优化索引和查询 132
4.3 查询优化的工具 133
4.3.1 查询执行计划的缓存 133
4.3.2 清空缓存 134
4.3.3 动态管理对象 134
4.3.4 STATISTICS IO 135
4.3.5 测量查询的运行时间 135
4.3.6 分析执行计划 136
4.3.7 提示(Hint) 144
4.3.8 跟踪/Profiler 145
4.3.9 数据库引擎优化顾问 145
4.3.10 数据收集和管理数据仓库 146
4.3.11 使用SMO来复制统计信息 146
4.4 索引优化 146
4.4.1 表和索引的结构 146
4.4.2 索引访问方法 153
4.4.3 索引策略的分析 191
4.4.4 碎片 200
4.4.5 分区 201
4.5 准备样本数据 202
4.5.1 数据准备 202
4.5.2 TABLESAMPLE 206
4.6 基于集合的方法和迭代/过程方法的比较,以及一个优化练习 208
4.7 总结 214
第5章 算法和复杂性 215
5.0.1 你有一个1夸特的硬币吗? 215
5.1 如何度量算法(How Algorithms Scale) 217
5.1.1 二次缩放(Quadratic Scaling)的一个例子 217
5.1.2 具有线性复杂度的算法 218
5.1.3 指数和超指数复杂度 218
5.1.4 次线性(sublinear)复杂度 219
5.1.5 常量复杂度 219
5.1.6 复杂度的技术定义 220
5.1.7 复杂度的比较 221
5.2 经典算法和算法策略 222
5.2.1 排序算法 223
5.2.2 字符串查找 225
5.3 一个实际的应用程序 226
5.3.1 识别测量数据的趋势 226
5.3.2 LISLP算法的复杂度 226
5.3.3 用T-SQL解决最长上升子序列的长度问题 227
5.4 总结 229
第6章 子查询、表表达式和排名函数 231
6.1 子查询 232
6.1.1 独立子查询 232
6.1.2 相关子查询 235
6.1.3 行为不当的子查询 244
6.1.4 不常用的谓词 245
6.2 表表达式(Table Expressions) 246
6.2.1 派生表 247
6.2.2 公用表表达式 249
6.3 分析排名函数 255
6.3.1 行号 257
6.3.2 排名和密集排名(Dense Rank) 271
6.3.3 组号(Tile Number) 272
6.4 数字辅助表 276
6.5 缺失范围和现有范围(也称为间断和孤岛) 279
6.5.1 缺失范围(间断) 281
6.5.2 现有范围(孤岛) 288
6.6 总结 296
第7章 联接和集合运算 297
7.1 联接 297
7.1.1 旧语法和新语法 297
7.1.2 基本联接类型 298
7.1.3 其他的联接分类 306
7.1.4 上一年度的滑动合计 317
7.1.5 联接算法 320
7.1.6 拆分元素 326
7.2 集合运算 332
7.2.1 UNION 332
7.2.2 EXCEPT 333
7.2.3 INTERSECT 334
7.2.4 集合运算的优先级 335
7.2.5 在集合运算中使用INTO 336
7.2.6 避开不支持的逻辑阶段 336
7.3 总结 338
第8章 数据聚合和透视 339
8.1 OVER 子句 339
8.2 决胜属性(Tiebreaker) 341
8.3 连续聚合 343
8.3.1 累积聚合(Cumulative Aggregation) 344
8.3.2 滑动聚合(Sliding Aggregation) 348
8.3.3 年初至今(YTD) 349
8.4 透视转换(Pivoting) 350
8.4.1 透视转换属性 350
8.4.2 关系除法 353
8.4.3 聚合数据 355
8.5 逆透视转换 357
8.6 自定义聚合 360
8.6.1 使用透视转换的自定义聚合 361
8.6.2 用户定义聚合函数(UDA,User Defined Aggregate) 362
8.6.3 专用解决方案 370
8.7 直方图(Histogram) 380
8.8 分组因子 383
8.9 分组集 385
8.9.1 样例数据 386
8.9.2 GROUPING SETS从属子句 387
8.9.3 CUBE从属子句 389
8.9.4 ROLLUP从属子句 390
8.9.5 分组集代数 392
8.9.6 GROUPING_ID函数 395
8.9.7 保存分组集 397
8.9.8 排序 399
8.10 总结 400
第9章 TOP和APPLY 401
9.1 SELECT TOP 401
9.1.1 TOP和确定性 402
9.1.2 TOP和输入表达式 403
9.1.3 TOP和修改 404
9.1.4 增强的TOP 406
9.2 APPLY 407
9.3 使用TOP和APPLY解决常见问题 408
9.3.1 每组中的TOP n 408
9.3.2 匹配当前值和前一个值 413
9.3.3 分页 416
9.3.4 随机行 419
9.3.5 中值(Median) 421
9.4 逻辑转换 422
9.5 总结 424
第10章 数据修改 425
10.1 插入数据 425
10.1.1 增强的VALUES子句 425
10.1.2 SELECT INTO 426
10.1.3 BULK行集提供程序 428
10.1.4 按最小方式记录日志的操作 430
10.1.5 INSERT EXEC 447
10.1.6 序列机制 450
10.1.7 全局唯一标识符(GUID) 454
10.2 删除数据 454
10.2.1 TRUNCATE与DELETE 454
10.2.2 删除包含重复数据的行 455
10.2.3 基于联接的DELETE 456
10.3 更新数据 458
10.3.1 基于联接的UPDATE 458
10.3.2 更新大值数据类型 461
10.3.3 用SELECT和UPDATE语句进行赋值 462
10.4 合并数据 465
10.4.1 MERGE语句基础 467
10.4.2 额外增加一个谓词 470
10.4.3 多个WHEN子句 471
10.4.4 WHEN NOT MATCHED BY SOURCE子句 472
10.4.5 MERGE Values 473
10.4.6 MERGE与触发器 474
10.5 OUTPUT子句 475
10.5.1 带有OUTPUT的INSERT 476
10.5.2 带有OUTPUT的DELETE 477
10.5.3 带有OUTPUT的UPDATE 478
10.5.4 带有OUTPUT的MERGE 480
10.5.5 可组合的DML 481
10.6 总结 482
第11章 查询分区表 483
11.1 在SQL Server中进行分区 483
11.1.1 分区视图 483
11.1.2 分区表 484
11.2 总结 496
第12章 图、树、层次结构和递归查询 497
12.1 术语 497
12.1.1 图 497
12.1.2 树 498
12.1.3 层次结构 498
12.2 应用场景 498
12.2.1 员工组织图 498
12.2.2 材料清单(BOM) 500
12.2.3 道路系统 502
12.3 迭代/递归 505
12.3.1 下属 505
12.3.2 祖先 513
12.3.3 带有路径枚举的子图/子树 516
12.3.4 排序 518
12.3.5 环 520
12.4 具体化路径 523
12.4.1 维护数据 523
12.4.2 查询 527
12.5 使用HIERARCHYID数据类型的具体化路径 531
12.5.1 维护数据 532
12.5.2 查询 537
12.5.3 使用HIERARCHYID的其他方面 540
12.6 嵌套集合 548
12.6.1 分配左值和右值 549
12.6.2 查询 553
12.7 传递闭包(Transitive Closure) 555
12.7.1 有向无环图 555
12.7.2 无向有环图 559
12.8 总结 566
索引 567
· · · · · · (收起)
读后感
让你对T-SQL查询有更加深入的理解,详细的介绍了T-SQL语句的逻辑查询,以及查询优化的知识。 其中还介绍了一些非常实用的T-SQL技巧(数字辅助表,附加属性、计算分组因子和间断之前的值、下一个或上一个值等),用来解决现实中的常见问题。 最后还介绍了用T-SQL来处理一些特殊...
让你对T-SQL查询有更加深入的理解,详细的介绍了T-SQL语句的逻辑查询,以及查询优化的知识。 其中还介绍了一些非常实用的T-SQL技巧(数字辅助表,附加属性、计算分组因子和间断之前的值、下一个或上一个值等),用来解决现实中的常见问题。 最后还介绍了用T-SQL来处理一些特殊...
让你对T-SQL查询有更加深入的理解,详细的介绍了T-SQL语句的逻辑查询,以及查询优化的知识。 其中还介绍了一些非常实用的T-SQL技巧(数字辅助表,附加属性、计算分组因子和间断之前的值、下一个或上一个值等),用来解决现实中的常见问题。 最后还介绍了用T-SQL来处理一些特殊...
让你对T-SQL查询有更加深入的理解,详细的介绍了T-SQL语句的逻辑查询,以及查询优化的知识。 其中还介绍了一些非常实用的T-SQL技巧(数字辅助表,附加属性、计算分组因子和间断之前的值、下一个或上一个值等),用来解决现实中的常见问题。 最后还介绍了用T-SQL来处理一些特殊...
让你对T-SQL查询有更加深入的理解,详细的介绍了T-SQL语句的逻辑查询,以及查询优化的知识。 其中还介绍了一些非常实用的T-SQL技巧(数字辅助表,附加属性、计算分组因子和间断之前的值、下一个或上一个值等),用来解决现实中的常见问题。 最后还介绍了用T-SQL来处理一些特殊...
用户评价
作为一名经验丰富的SQL Server DBA,我一直寻求能够拓宽我技术视野的书籍,而《Microsoft SQL Server 2008技术内幕》无疑满足了我的期望。这本书对于SQL Server的内存管理和I/O子系统的深度剖析,给了我极大的启发。我喜欢书中关于Buffer Pool、Buffer Manager以及Lazy Writer等组件的详细讲解,它帮助我理解了SQL Server是如何高效地管理内存,以及如何处理内存压力。我还对书中关于SQL Server I/O操作的分析印象深刻,它详细解释了数据文件的读写过程,以及如何通过I/O相关的性能计数器来诊断I/O瓶颈。这些知识对于我优化数据库性能,尤其是在处理大规模数据和高并发访问的场景下,至关重要。这本书让我对SQL Server的内部运作有了更全面的认识,也为我解决一些棘手的性能问题提供了宝贵的思路和方法。
这本《Microsoft SQL Server 2008技术内幕》简直是我的福音。作为一个在IT行业摸爬滚打了近十年,却总觉得SQL Server内部机制始终像一团迷雾的人,这本书的出现,如同一缕阳光穿透了层层迷雾,让我对SQL Server的理解上升到了一个全新的高度。我尤其钟爱它深入浅出的讲解方式,作者并没有简单罗列技术名词,而是将SQL Server的每一个核心组件,从内存管理、I/O子系统到查询优化器,都进行了细致入微的剖析。我曾无数次因为数据库性能瓶颈而焦头烂额,也曾因为某个棘手的阻塞问题而彻夜难眠,但读了这本书,我仿佛找到了问题的根源所在,甚至能预判可能出现的问题并提前规避。例如,关于Buffer Pool的管理,书中详细阐述了LRU算法的应用,以及如何通过监控DMV来判断内存压力。更让我惊叹的是,作者还结合了大量的案例研究,用实际操作演示了如何诊断和解决各种复杂的性能问题。每一次阅读,我都能从中汲取新的知识,并且能立刻运用到实际工作中,解决了很多之前束手无策的难题。这本书不仅仅是技术手册,更像是一位经验丰富的导师,引导我一步步走向SQL Server专家的行列。
《Microsoft SQL Server 2008技术内幕》这本书,真的是我近几年来读过的最扎实、最有价值的技术书籍之一。我不是那种只满足于了解SQL Server基本语法的初学者,而是希望能够深入理解其运行机制的 DBA。这本书恰恰满足了我的需求。我对书中关于查询处理的章节尤为着迷。从SQL语句的解析、编译,到查询优化器如何生成执行计划,再到实际的执行过程,每一个环节都被剖析得淋漓尽致。书中对各种算子(如Table Scan, Index Seek, Nested Loops Join, Hash Match等)的解释,以及它们在不同场景下的性能表现,都让我受益匪浅。我之前在优化一些复杂的报表查询时,常常无从下手,但通过学习这本书中关于执行计划的分析方法,我能够快速定位到性能瓶颈,并且采取针对性的优化措施,比如添加合适的索引、重写查询语句,甚至调整数据库的配置参数。这本书就像一个宝藏,每一次阅读都能挖掘出新的金矿,不断提升我的数据库管理和性能调优能力。
对于我这种长期与SQL Server打交道的人来说,《Microsoft SQL Server 2008技术内幕》提供了一个绝佳的机会,让我能够从“使用”者转变为“理解”者。书中关于SQL Server的安全模型和权限管理部分,让我对如何构建一个安全的数据库环境有了更深的认识。它不仅讲解了用户、角色、登录名之间的关系,还详细介绍了对象级别的权限控制,以及如何通过GRANT、DENY、REVOKE语句来精细化管理权限。我之前在处理一些权限交叉的场景时,常常感到混乱,但读完这本书,我才明白了其中的逻辑和最佳实践。另外,书中关于SQL Server审计功能的讲解也让我眼前一亮,它介绍了如何配置和使用SQL Server Audit来追踪数据库的访问和操作,这对于满足合规性要求和进行安全审计非常有帮助。每一次翻阅这本书,我都能发现新的细节,并且将这些细节与我的实际工作相结合,不断完善我的数据库管理技能。
《Microsoft SQL Server 2008技术内幕》这本书的内容深度和广度都令人赞叹。我一直对SQL Server的内部工作原理感到好奇,尤其是那些不常在日常开发中直接接触到的部分,比如SQL Server的SQL OS和SQL Server的内存模型。这本书对SQL Server的体系结构进行了非常详尽的介绍,从操作系统层面到SQL Server的进程管理,再到内存分配和管理,都进行了深入的剖析。我特别喜欢书中关于SQL Server线程模型和并发处理的讲解,它让我理解了SQL Server是如何管理和调度大量并发请求的,以及各种线程类型(如Worker Threads, Task Schedulers)的作用。我还对书中关于SQL Server性能计数器(Performance Monitor Counters)的详细解释印象深刻,它提供了一套非常有用的工具,帮助我监控数据库的性能指标,从而找出潜在的瓶颈。这本书让我对SQL Server的理解不再停留在表面,而是深入到了其核心的运行机制。
这本书给我带来的不仅仅是知识,更是一种解决问题的思路。我是一名系统架构师,在设计和部署数据库解决方案时,我需要考虑的因素很多,而《Microsoft SQL Server 2008技术内幕》提供了宝贵的参考。它详细介绍了SQL Server的可用性特性,比如镜像、集群以及AlwaysOn可用性组(虽然这本书是2008年的,但其中关于高可用性概念的阐述依然非常有指导意义,并且是理解后续版本新特性的基础)。我尤其喜欢书中关于数据库备份与恢复策略的讨论,它不仅仅是介绍了各种备份类型(完整备份、差异备份、事务日志备份),还深入探讨了如何在不同业务场景下选择最合适的恢复模式和策略,以最小化数据丢失的风险。我还记得书中关于SQL Server Agent的介绍,详细阐述了如何创建和管理作业,如何设置警报和操作。这些看似琐碎的知识,在实际运维中却至关重要,能够帮助我建立起一套健壮、可靠的数据库运维体系。
当我第一次接触到《Microsoft SQL Server 2008技术内幕》这本书的时候,我正在努力提升自己作为一名数据库开发人员的技能。这本书对我而言,就像一本武林秘籍,揭示了SQL Server内部的诸多奥秘。我特别关注书中关于索引优化和查询调优的章节。作者详细讲解了各种索引类型(聚集索引、非聚集索引、覆盖索引、列存储索引等)的原理和适用场景,以及如何通过分析执行计划来发现和解决低效的查询。我曾为一个复杂的查询性能问题困扰了很久,最终通过书中讲解的索引重建和重新组织技巧,以及一些查询重写的方法,成功地将查询的执行时间从几分钟缩短到了几秒钟。这本书也让我对SQL Server的数据存储和检索机制有了更深刻的理解,比如表扫描、索引查找、书签查找等概念,让我能够更有效地设计表结构和编写SQL查询,从而提升应用程序的整体性能。
《Microsoft SQL Server 2008技术内幕》这本书,绝对是我数据库学习生涯中的一本里程碑式的书籍。我一直对SQL Server的CPU使用率和进程管理感到困惑,而这本书为我揭开了这些谜团。书中关于SQL Server的CPU调度、工作线程(Worker Threads)的管理,以及调度器(Schedulers)如何分配任务的讲解,都让我受益匪浅。我之前在排查CPU高占用的问题时,常常束手无策,但读了这本书,我才明白了很多CPU资源消耗的原因,并且学会了如何通过监控SQL Server的CPU使用率相关的性能计数器,以及利用SQL Server的内部工具来定位消耗大量CPU资源的查询或进程。此外,书中关于SQL Server的连接管理和会话(Sessions)的详细介绍,也让我对客户端如何连接数据库,以及SQL Server如何管理大量并发连接有了更清晰的认识。这本书的深入性让我对SQL Server的掌握达到了一个新的境界。
《Microsoft SQL Server 2008技术内幕》这本书,为我打开了一扇通往SQL Server更深层次理解的大门。我一直对SQL Server的日志管理和事务处理机制感到好奇,而这本书恰恰满足了我的求知欲。书中详细介绍了SQL Server的事务日志(Transaction Log)的工作原理,包括日志的写入、检查点(Checkpoint)和日志截断(Log Truncation)等概念。我曾因为理解不透彻而导致在进行大量数据修改操作时,日志文件快速增长,甚至影响到数据库的正常运行,读了这本书后,我才明白了其中的缘由,并且学会了如何通过配置恢复模式、定期备份事务日志等方式来有效管理日志文件。此外,书中关于SQL Server的事务隔离级别和并发控制的详细阐述,也让我对如何处理并发访问和避免死锁有了更清晰的认识。这本书的内容对于任何希望深入理解SQL Server的专业人士来说,都具有极高的价值。
说实话,刚拿到《Microsoft SQL Server 2008技术内幕》的时候,我还有些忐忑,毕竟“技术内幕”这四个字听起来就充满了挑战性。然而,当我翻开第一页,那种顾虑就被彻底打消了。这本书的结构设计非常合理,从基础概念的梳理,到高级特性的深度挖掘,层层递进,引人入胜。尤其让我印象深刻的是关于SQL Server的存储结构和文件组织部分,作者详细解释了数据文件(.mdf)、日志文件(.ldf)和文件组的内在联系,以及它们在I/O操作中的作用。通过书中对page结构、B-tree索引原理的细致讲解,我终于明白了为什么一次索引扫描的效率会比全表扫描高出那么多。书中还花了不少篇幅讲解SQL Server的并发控制机制,包括锁、事务隔离级别以及各种阻塞情况的产生原因和解决方法。我曾经因为锁升级的问题导致应用程序响应缓慢,阅读了这部分内容后,我才恍然大悟,并且学会了如何通过调整事务隔离级别或者优化查询来避免这类问题。这本书的作者显然对SQL Server有着极为深厚的理解,并且能够用清晰易懂的语言将其表达出来,这对于我这样的普通读者来说,无疑是极大的幸事。
接下来是XML
有自己的见解,好书。
很专业的书,适合t sql开发人员。
不只是数据库,还有数学和逻辑,例子也容易理解
在读中...