十步优化sql server中的数据访问

十步优化sql server中的数据访问

ID:10730806

大小:105.00 KB

页数:33页

时间:2018-07-07

十步优化sql server中的数据访问_第1页
十步优化sql server中的数据访问_第2页
十步优化sql server中的数据访问_第3页
十步优化sql server中的数据访问_第4页
十步优化sql server中的数据访问_第5页
资源描述:

《十步优化sql server中的数据访问》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第三步:整理索引碎片  你可能已经创建好了索引,并且所有索引都在工作,但性能却仍然不好,那很可能是产生了索引碎片,你需要进行索引碎片整理。  什么是索引碎片?  由于表上有过度地插入、修改和删除操作,索引页被分成多块就形成了索引碎片,如果索引碎片严重,那扫描索引的时间就会变长,甚至导致索引不可用,因此数据检索操作就慢下来了。  有两种类型的索引碎片:内部碎片和外部碎片。  内部碎片:为了有效的利用内存,使内存产生更少的碎片,要对内存分页,内存以页为单位来使用,最后一页往往装不满,于是形成了内部碎片。  外部碎

2、片:为了共享要分段,在段的换入换出时形成外部碎片,比如5K的段换出后,有一个4k的段进来放到原来5k的地方,于是形成1k的外部碎片。  如何知道是否发生了索引碎片?  执行下面的SQL语句就知道了(下面的语句可以在SQLServer2005及后续版本中运行,用你的数据库名替换掉这里的AdventureWorks): SELECTobject_name(dt.object_id)Tablename,si.name  IndexName,dt.avg_fragmentation_in_percentAS  Ext

3、ernalFragmentation,dt.avg_page_space_used_in_percentAS  InternalFragmentation  FROM  (  SELECTobject_id,index_id,avg_fragmentation_in_percent,avg_page_space_used_in_percent  FROMsys.dm_db_index_physical_stats(db_id('AdventureWorks'),null,null,null,'DETAILED

4、'  )  WHEREindex_id<>0)ASdtINNERJOINsys.indexessiONsi.object_id=dt.object_id  ANDsi.index_id=dt.index_idANDdt.avg_fragmentation_in_percent>10  ANDdt.avg_page_space_used_in_percent<75ORDERBYavg_fragmentation_in_percentDESC  执行后显示AdventureWorks数据库的索引碎片信息。  图3

5、索引碎片信息  使用下面的规则分析结果,你就可以找出哪里发生了索引碎片:  1)ExternalFragmentation的值>10表示对应的索引发生了外部碎片;  2)InternalFragmentation的值<75表示对应的索引发生了内部碎片。  如何整理索引碎片?  有两种整理索引碎片的方法:  1)重组有碎片的索引:执行下面的命令  ALTERINDEXALLONTableNameREORGANIZE  2)重建索引:执行下面的命令  ALTERINDEXALLONTableNameREBUILD

6、WITH(FILLFACTOR=90,ONLINE=ON)  也可以使用索引名代替这里的“ALL”关键字重组或重建单个索引,也可以使用SQLServer管理工作台进行索引碎片的整理。  图4使用SQLServer管理工作台整理索引碎片  什么时候用重组,什么时候用重建呢?  当对应索引的外部碎片值介于10-15之间,内部碎片值介于60-75之间时使用重组,其它情况就应该使用重建。  值得注意的是重建索引时,索引对应的表会被锁定,但重组不会锁表,因此在生产系统中,对大表重建索引要慎重,因为在大表上创建索引可能会

7、花几个小时,幸运的是,从SQLServer2005开始,微软提出了一个解决办法,在重建索引时,将ONLINE选项设置为ON,这样可以保证重建索引时表仍然可以正常使用。  虽然索引可以提高查询速度,但如果你的数据库是一个事务型数据库,大多数时候都是更新操作,更新数据也就意味着要更新索引,这个时候就要兼顾查询和更新操作了,因为在OLTP数据库表上创建过多的索引会降低整体数据库性能。  我给大家一个建议:如果你的数据库是事务型的,平均每个表上不能超过5个索引,如果你的数据库是数据仓库型,平均每个表可以创建10个索引

8、都没问题。  在前面我们介绍了如何正确使用索引,调整索引是见效最快的性能调优方法,但一般而言,调整索引只会提高查询性能。除此之外,我们还可以调整数据访问代码和TSQL,本文就介绍如何以最优的方法重构数据访问代码和TSQL。  第四步:将TSQL代码从应用程序迁移到数据库中  也许你不喜欢我的这个建议,你或你的团队可能已经有一个默认的潜规则,那就是使用ORM(ObjectRelationalMappi

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。