sql技术总结范文
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
sql技术总结范文
《sql技术总结》是一篇好的范文,好的范文应该跟大家分享,。
使用SqlServer xx的CDC技术研究
1.CDC简介
CDC(Change Data Capture,变更捕获)。主要原理为,通过对事务日志的异步读取,记录DML操作的发生时间、类型和实际影响的数据变化,然后将这些数据记录到启用CDC时自动创建的表中。通过cdc相关的存储过程,获取详细的数据变化情况。由于数据变化是异步读取的,因此对整体性能的影响不大,远小于通过Trigger 实现的数据变化记录。
适用环境:仅在SQLServerxx(含)以后的企业版、开发版和评估版中可用。常见场景:在数据仓库或数据中心的建设过程中,通过这种技术,可以简化从业务导入数据(ETL)的复杂度,以及降低对生产系统的性能影响。
使用方法:使用方法较为简单,(网上有很多例子),此处略过。
2.优缺点总结
优点:
1)可以对单个表进行监控,也可以对单个表的某些字段进行监控,使用较为灵活;
2)对用户修改以前的历史记录可以有效捕捉,因此可以解决没有时间戳的变更问题;
3)使用这种技术,就可以不用再使用triger这种低效高耗的技术;
4)是一种很好的向数据仓库或数据中心增量加载数据的好方法。
缺点:
1)CDC激活会显著增加日志文件的读操作。
2)CDC激活后更新跟踪表会产生额外的写入,并消耗存储空间。
3)CDC激活后,原数据表的聚簇索引尺寸会影响到CDC产生的IO数据量,而原始数据表上的非聚簇索引则不会。
4)CDC激活后,被选定进行更新跟踪的列键值属性同样会影响到CDC产生的IO数据量和存储空间。
5)如果某部分日志,CDC的进程还没有读取,那么在截断日志时就会忽略这个部分(截断日志或收缩日志都会对CDC有一定影响,需要考虑日志维护策略)
官方建议:
微软建议CDC结合快照隔离级别使用,可以避免读取变更数据与变更数据写入时的读写阻塞。需要注意:快照隔离级别会有额外的开销,特别是Tempdb(所有的数据更改都会被版本化存到tempdb)。启用CDC之后会新增叫CDC的Schema和一系列的系统表、SP和View。官方建议不要直接查询系统表而是使用对应的系统SP/FN来获取CDC数据。
1)capture作业是用于扫描日志文件,把变更记录写到变更表中。调用sp_MScdc_capture_job来实现,可以根据当前库的实际事务吞吐量来设置扫描参数和扫描间隔,使得在性能开销和跟踪需求间达到合理平衡。
2)cleanup作业是清理变更变表中的数据,默认三天的数据,确定合适的间隔是非常重要的。
4.关键问题
理想状态下,创建CDC的同时将需要轮询的变更表(变更表,每跟踪一个表就会有一个变更数据表;其他不需要轮询的不需关注)部署到非生产机的SQLserver(即数据仓库或数据中心的SQLSERVER)上,以减少对生产机的依赖与影响。
但是,没有资料显示,可以直接将变更表放在另外一个SQLSERVER中,结合微软的官方建议,也不建议直接操作他的系统表,故可以考虑使用微软的数据复制功能,将变更表同步到数据仓库或数据中心中。然后,供后续数据处理使用。
篇二:SQL应用总结
SQL应用总结
修改记录:
SQL查询分析思路:
SQL查询可是分为简单查询和复杂查询两种:
?简单查询是那些只需要一个select??from 就可以完成的查询。这种查询书写很
简单。
1.确定与这个查询相关的表都有哪些。
2.这些表之间是通过什么条件联系在一起的。
3.应用这些条件写一个一层的select??from??where就可以实现。
?复杂查询是那些一个select??from不能实现的查询。这种查询需要用到from语
句中的子查询,也就是from语句中的表至少有一个是中间表(由原始表查询出来的一个结果表,它只是一个临时表,在数据库中并不存在)。1.确定与这个查询相关的表都有哪些,比如说A、B、C。2.判断需要什么样的中间表,这个中间表都需要哪些字段。在确定字段的时候应
该注意把与其它表和中间表的关联条件涉及的字段加入到字段组中
。假设我
3.现在关心的重点是怎么得到这两个中间表D、E。对D,E的分析我们分
别应用步骤1和2。在第二步如果它们不需要中间表,可以直接由原始表通过简单查询得到,问题就解决了。比如D可由A、B两个原始表直接得到,E可
将变成这样
如果D、E中至少有一个不能直接得到,重复步骤1和2,直到中间表都可由原始表直接得到为止。
4.这样一边分析一边向我们的SQL中添加新内容,直到完成。
竖排变横排
问题
一般情况下,我们要存放学生的数学成绩和化学成绩会用两个单独的表(Table1:mathematics和Table2:chemistry)来存储,这样我们想要把学生的的数学成绩和化学
但如果我们的数学成绩和化学成绩存储在一个表中,如下表显示
我们怎么才能把学生的数学成绩和化学成绩组织到同一行,达到下表的效果呢?
解决方案
?通过应用decode()函数可以实现适用数据库:Oracle 适用数据库:DB2、Oracle、Mysql、Sql Server Sql 语句如下:
效果
影响
这种方法是一个不错的方法,但也有它的局限性。它只能对数字进行处理,对字符串就不适用了。
相关用法
参见:
1.竖排变横排的延伸
2.横排变竖排
竖排变横排的延伸
问题
在竖排变横排里,我们已经知道怎么把学生的数学成绩和化学成绩组织到一行上。现在我们这张表中又加入了一个新字段term(学期)。如下表所示: