仓酷云

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

[学习教程] MSSQL网站制作之优化SQL Server索引的小技能

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

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

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

x
在执行崩溃恢复时,理解在一个数据库中的每一个表tbl_name对应的在数据库目录中的3个文件是很重要的:server|技能|索引|优化SQLServer中有几个可让你检测、调剂和优化SQLServer功能的工具。在本文中,我将申明怎样用SQLServer的工具来优化数据库索引的利用,本文还触及到有关索引的一样平常性常识。关于索引的知识

影响到数据库功能的最年夜要素就是索引。因为该成绩的庞大性,我只大概复杂的谈谈这个成绩,不外关于这方面的成绩,今朝有好几本不错的书本可供你参阅。我在这里只会商两种SQLServer索引,即clustered索引和nonclustered索引。当考查创建甚么范例的索引时,你应该思索数据范例和保留这些数据的column。一样,你也必需思索数据库大概用到的查询范例和利用的最为频仍的查询范例。
索引的范例
假如column保留了高度相干的数据,而且经常被按次会见时,最好利用clustered索引,这是由于假如利用clustered索引,SQLServer会在物理上按升序(默许)大概降序重排数据列,如许就能够敏捷的找到被查询的数据。一样,在征采把持在必定局限内的情形下,对这些column也最好利用clustered索引。这是由于因为物理上重排数据,每一个表格上只要一个clustered索引。
与下面情形相反,假如columns包括的数据相干性较差,你可使用nonculstered索引。你能够在一个表格中利用高达249个nonclustered索引――只管我设想不出实践使用场所会用的上这么多索引。
当表格利用主关头字(primarykeys),默许情形下SQLServer会主动对包括该关头字的column(s)创建一个独占的cluster索引。很明显,对这些column(s)创建独占索引意味着主关头字的独一性。当创建外关头字(foreignkey)干系时,假如你盘算频仍利用它,那末在外关头字cloumn上创建nonclustered索引不掉为一个好的办法。假如表格有clustered索引,那末它用一个链表来保护数据页之间的干系。相反,假如表格没有clustered索引,SQLServer将在一个仓库中保留数据页。
数据页
当索引创建起来的时分,SQLServer就创建数据页(datapage),数据页是用以减速搜刮的指针。当索引创建起来的时分,其对应的添补因子也即被设置。设置添补因子的目标是为了唆使该索引中数据页的百分比。跟着工夫的推移,数据库的更新会损耗失落已有的余暇空间,这就会招致页被拆分。页拆分的成果是下降了索引的功能,因此利用该索引的查询会招致数据存储的分崩离析。当创建一个索引时,该索引的添补因子即被设置好了,因而添补因子不克不及静态保护。
为了更新数据页中的添补因子,我们能够中断旧有索引偏重建索引,偏重新设置添补因子(注重:这将影响到以后数据库的运转,在主要场所请审慎利用)。DBCCINDEXDEFRAG和DBCCDBREINDEX是扫除clustered和nonculstered索引碎片的两个命令。INDEXDEFRAG是一种在线操纵(也就是说,它不会堵塞别的表格举措,如查询),而DBREINDEX则在物理上重修索引。在尽年夜多半情形下,重修索引能够更好的打消碎片,可是这个长处是以堵塞以后产生在该索引地点表格上别的举措为价值调换来得。当呈现较年夜的碎片索引时,INDEXDEFRAG会花上一段对照长的工夫,这是由于该命令的运转是基于小的交互块(transactionalblock)。
添补因子
当你实行上述措施中的任何一个,数据库引擎能够更无效的前往编进索引的数据。关于添补因子(fillfactor)话题已超越了本文的范围,不外我仍是提示你必要注重那些盘算利用添补因子创建索引的表格。
在实行查询时,SQLServer静态选择利用哪一个索引。为此,SQLServer依据每一个索引上散布在该关头字上的统计量来决意利用哪一个索引。值得注重的是,经由一样平常的数据库举动(如拔出、删除和更新表格),SQLServer用到的这些统计量大概已“过时”了,必要更新。你能够经由过程实行DBCCSHOWCONTIG来检察统计量的形态。当你以为统计量已“过时”时,你能够实行该表格的UPDATESTATISTICS命令,如许SQLServer就革新了关于该索引的信息了。
创建数据库保护企图
SQLServer供应了一种简化并主动保护数据库的工具。这个称之为数据库保护企图导游(DatabaseMaintenancePlanWizard,DMPW)的工具也包含了对索引的优化。假如你运转这个导游,你会看到关于数据库中关于索引的统计量,这些统计量作为日记事情并准时更新,如许就加重了手工重修索引所带来的事情量。假如你不想主动按期革新索引统计量,你还能够在DMPW当选择从头构造数据和数据页,这将中断旧有索引并按特定的添补因子重修索引。
支持多线程,充分利用CPU资源
飘飘悠悠 该用户已被删除
沙发
发表于 2015-1-19 11:56:20 | 只看该作者
varchar(max)\\\\nvarchar(max)类型的引入大大的提高了编程的效率,可以使用字符串函数对CLOB类型进行操作,这是一个亮点。
小魔女 该用户已被删除
板凳
发表于 2015-1-25 22:12:41 来自手机 | 只看该作者
是否碎片会引发效率问题?这都是需要进一步探讨的东西。varbinary(max)代替image也让SQLServer的字段类型更加简洁统一。
灵魂腐蚀 该用户已被删除
地板
发表于 2015-2-4 08:43:29 | 只看该作者
无法深入到数据库系统层面去了解和探究
金色的骷髅 该用户已被删除
5#
发表于 2015-2-9 20:22:28 | 只看该作者
我们学到了什么?思考问题的时候从表的角度来思考问
再现理想 该用户已被删除
6#
发表于 2015-2-27 21:15:47 | 只看该作者
个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。
老尸 该用户已被删除
7#
发表于 2015-3-9 14:14:17 | 只看该作者
其实可以做一下类比,Oracle等数据库产品老早就支持了java编程,而且提供了java池参数作为用户配置接口。但是现在有哪些系统大批使用了java存储过程?!连Oracle自己的应用都不用为什么?!
第二个灵魂 该用户已被删除
8#
发表于 2015-3-16 23:29:26 | 只看该作者
还不是性能有问题!否则面向对象的数据库早就实现了!建议使用CLR的地方一般是和应用的复杂程度或操作系统环境有很高的耦合度的场景。如你想构建复杂的算法,并且用到了大量的指针和高级数据模型。
山那边是海 该用户已被删除
9#
 楼主| 发表于 2015-3-23 06:46:41 | 只看该作者
换言之,只有在不断的失败中尝试成功,而关于失败的总结却是很少的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-22 23:11

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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