仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 668|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL编程:怎样进步SQL SERVER的功能

[复制链接]
谁可相欹 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:27:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
有了数据以后,我们就要想一个比较统一的方法来闪回。上面我们说了对于DML操作,可以通过反向执行所有逆操作来实现,对于语句里面的DDL,只能直接跳过。原因是一个DDL不一定有直接的逆操作。server|功能
怎样进步SQLSERVER的功能



第一篇:经由过程保护表的索引来进步数据的会见速率



年夜多半SQLServer表必要索引来进步数据的会见速率,假如没有索引,SQLServer要举行表格扫描读取表中的每个纪录才干找到索要的数据。索引能够分为簇索引和非簇索引,簇索引经由过程重排表中的数据来进步数据的会见速率,而非簇索引则经由过程保护表中的数据指针来进步数据的索引。



索引的系统布局:



为何要不休的保护表的索引?起首,复杂先容一下索引的系统布局。SQLServer在硬盘顶用8KB页面在数据库文件内寄存数据。缺省情形下这些页面及其包括的数据是无构造的。为了使凌乱变成有序,就要天生索引。天生索引后,就有了索引页和数据页,数据页保留用户写进的数据信息。索引页寄存用于检索列的数据值清单(关头字)和索引表中该值地点记录的地点指针。索引分为簇索引和非簇索引,簇索引本色上是将表中的数据排序,就仿佛是字典的索引目次。非簇索引不合错误数据排序,它只保留了数据的指针地点。向一个带簇索引的表中拔出数据,当数据页到达100%时,因为页面没有空间拔出新的的记录,这时候就会产生分页,SQLServer将约莫一半的数据从满页中移到空页中,从而天生两个半的满页。如许就有大批的数据空间。簇索引是双向链表,在每页的头部保留了前一页、后一页地点和分页后数据挪动的地点,因为新页大概在数据库文件中的任何中央,因而页面的链接纷歧定指向磁盘的下一个物理页,链接大概指向了另外一个地区,这就构成了分块,从而减慢了体系的速率。关于带簇索引和非簇索引的表来讲,非簇索引的关头字是指向簇索引的,而不是指向数据页的自己。

为了克制数据分块带来的负面影响,必要重构表的索引,这长短常费时的,因而只能在必要时举行。能够经由过程DBCCSHOWCONTIG来断定是不是必要重构表的索引。上面举例来讲明DBCCSHOWCONTIG和DBCCREDBINDEX的利用办法。以SQLServer自带的northwind数据作为例子

带开SQLServer的Queryanalyzer输出命令:

usenorthwind

declare@table_idint

set@table_id=object_id(orders)

dbccshowcontig(@table_id)

这个命令显现northwind数据库中的orders表的分块情形,了局以下:







DBCCSHOWCONTIGscanningOrderstable...

Table:Orders(21575115);indexID:1,databaseID:6

TABLElevelscanperformed.

-PagesScanned................................:20

-ExtentsScanned..............................:5

-ExtentSwitches..............................:4

-Avg.PagesperExtent........................:4.0

-ScanDensity[BestCount:ActualCount].......:60.00%[3:5]

-LogicalScanFragmentation..................:0.00%

-ExtentScanFragmentation...................:40.00%

-Avg.BytesFreeperPage.....................:146.5

-Avg.PageDensity(full).....................:98.19%

DBCCexecutioncompleted.IfDBCCprintederrormessages,contactyoursystemadministrator.

经由过程剖析这些了局能够晓得该表的索引是不是必要重构。表1.1形貌了每行的意义















信息形貌

PagesScanned表或索引中的长页数

ExtentsScanned表或索引中的长区页数

ExtentSwitchesDBCC遍历页时从一个地区到另

一个地区的次数

Avg.PagesperExtent相干地区中的页数

ScanDensityBestCount是一连链接时的幻想区

[BestCount:ActualCount]域改动数,ActualCount是实践区

域改动数,ScanDensity为100%

暗示没有分块。

LogicalScanFragmentation扫描索引页中掉序页的百分比

ExtentScanFragmentation不实践相邻和包括链路中一切链

接页的地区数

Avg.BytesFreeperPage扫描页面中均匀自在字节数

Avg.PageDensity(full)均匀页密度,暗示页有多满



从下面命令的实行了局能够看的出来,Bestcount为3而ActualCount为5这标明orders表有分块必要重构表索引。上面经由过程DBCCDBREINDEX来重构表的簇索引。

一样在QueryAnalyzer中输出命令:

usenorthwind

dbccdbreindex(northwind.dbo.orders,pk_orders,90)

实行了局:

DBCCexecutioncompleted.IfDBCCprintederrormessages,contactyoursystemadministrator.

Dbccdbreindex参数申明:第一个参数为要重构的标明。第二个参数为必要重构的索引表识,‘’暗示一切的索引。第三个参数为页的添补因子,添补因子越年夜,页越满。

然后再用DBCCSHOWCONTIG检察重构簇索引后的了局:

usenorthwind

declare@table_idint

set@table_id=object_id(orders)

dbccshowcontig(@table_id)

前往了局以下:

DBCCSHOWCONTIGscanningOrderstable...

Table:Orders(21575115);indexID:1,databaseID:6

TABLElevelscanperformed.

-PagesScanned................................:22

-ExtentsScanned..............................:3

-ExtentSwitches..............................:2

-Avg.PagesperExtent........................:7.3

-ScanDensity[BestCount:ActualCount].......:100.00%[3:3]

-LogicalScanFragmentation..................:0.00%

-ExtentScanFragmentation...................:33.33%

-Avg.BytesFreeperPage.....................:869.2

-Avg.PageDensity(full).....................:89.26%

DBCCexecutioncompleted.IfDBCCprintederrormessages,contactyoursystemadministrator.

经由过程了局我们能够看到ScanDenity为100%表没有分块不必要重构表索引了。假如重构表的簇索引ScanDenity还小于100%的话能够重构表的全体索引。命令以下:

--usenorthwind

--dbccdbreindex(northwind.dbo.orders,’’,90)



利用功课准时重构索引:



假如你的数据库会见十分频仍的话,十分简单呈现数据分块的征象,因而你能够使用功课来帮你在体系绝对余暇的时分重构你的索引。
EXAMPLE存储引擎是一个不做任何事情的存根引擎。它的目的是作为MySQL源代码中的一个例子,用来演示如何开始编写一个新存储引擎。同样,它的主要兴趣是对开发者。EXAMPLE存储引擎不支持编索引。
精灵巫婆 该用户已被删除
沙发
发表于 2015-1-19 13:07:55 | 只看该作者
然后最好有实践机会,能够把实践到的和实践结合起来,其实理论思考是个非常困扰和痛苦的事情
admin 该用户已被删除
板凳
发表于 2015-1-24 18:20:36 | 只看该作者
现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层.
海妖 该用户已被删除
地板
发表于 2015-2-2 11:48:38 | 只看该作者
原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜!
分手快乐 该用户已被删除
5#
发表于 2015-2-7 19:25:17 | 只看该作者
如安全管理、备份恢复、性能监控和调优等,SQL只要熟悉基本操作就可以,只要程序设计部分只要稍加了解即可(如存储过程、触发器等)。
飘灵儿 该用户已被删除
6#
发表于 2015-2-23 05:55:27 | 只看该作者
我是新手,正在学习数据库和操作系统,深感理论的泛广,唯有一步一步来,但是又感觉时间不够,收集了很多资料却总是没能认真的看完,希望有一个讨论板块,大家共同解决,共同分享,共同努力
变相怪杰 该用户已被删除
7#
发表于 2015-3-7 06:17:49 | 只看该作者
从项目平台的选择上讲,我们关心的,应该是一款产品能不能满足任务需求,而不是网上怎么说。
简单生活 该用户已被删除
8#
发表于 2015-3-14 14:16:27 | 只看该作者
现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层.
若相依 该用户已被删除
9#
发表于 2015-3-21 09:41:18 | 只看该作者
分区表是个亮点!从分区表也能看出微软要做大作强SQLServer的信心。资料很多,这里不详细说。但是重点了解的是:现在的SQLServer2005的表,都是默认为分区表的。因为它要支持滑动窗口的这个特性。这种特性对历史数据和实时数据的处理是很有帮助的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2025-1-10 05:45

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表