专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »数据库 » sqlserver索引:SQL Server索引管理的 6大铁律 »正文

sqlserver索引:SQL Server索引管理的 6大铁律

来源: 发布时间:星期二, 2009年2月17日 浏览:10次 评论:0
="t18">通过索引可以加快数据查询速度和减少系统响应时间;可以使表和表的间连接速度加快但是不是在任何时候使用索引都能够达到这种效果若在不恰当场合下使用索引反而会事和愿违

索引是以表列为基础数据库对象索引中保存着表中排序索引列并且纪录了索引列在数据库表中物理存储位置实现了表中数据逻辑排序通过索引可以加快数据查询速度和减少系统响应时间;可以使表和表的间连接速度加快

但是不是在任何时候使用索引都能够达到这种效果若在不恰当场合下使用索引反而会事和愿违所以在SQL Server数据库中使用索引还是需要遵守规则

铁律:天下没有免费午餐使用索引是需要付出代价

索引优点有目共睹但是却很少有人关心过采用索引所需要付出成本若数据库管理员能够对索引所需要付出代价有个充分认识也就不会那么随意到处建立索引了

仔细数数其实建立索引代价还是蛮大如创建索引和维护索引都需要花费时间和精力特别是在数据库设计时候数据库管理员为表中哪些字段需要建立索引要调研、要协调如当建有索引表中纪录又增加、删除、修改操作时数据库要对索引进行重新调整虽然这个工作数据库自动会完成但是需要消耗服务器资源当表中数据越多这个消耗资源也就越多如索引是数据库中实际存在对象所以每个索引都会占用物理空间若索引多了不但会占用大量物理空间而且也会影响到整个数据库运行性能

可见数据库管理员若要采用索引来提高系统性能自身仍然需要付出不少代价数据库管理员现在要考虑就是如何在这两个的间取得个均衡或者说找到个回报和投入临界点

铁律 2:对于查询中很少涉及列或者重复值比较多不要建立索引

在查询时候如果我们不按某个字段去查询则在这个字段上建立索引也是浪费如现在有张员工信息表我们可能按员工编号、员工姓名、或者出身地去查询员工信息但是我们往往不会按照身份证号码去查询虽然这个身份证号码是唯此时即使在这个字段上建立索引也不能够提高查询速度相反增加了系统维护时间和占用了系统空间这简直就是搬起石头砸自己脚呀

另外如上面员工信息表有些字段重复值比较多如性别字段主要就是“男”、“女”;职位字段中也是有限几个内容此时在这些字段上添加索引也不会显著增加查询速度减少用户响应时间相反需要占用空间反而会降低数据库整体性能

数据库索引管理中第 2条铁律就是对于查询中很少涉及列或者重复值比较多不要建立索引

铁律 3:对于按范围查询最好建立索引

在信息化管理系统中很多时候需要按范围来查询某些交易记录如在ERP系统中经常需要查询当月销售订单和销售出货情况这就需要按日期范围来查询交易记录如有时候发现库存不对时也需要某段时期库存进出情况如5月1日到12月3日库存交易情况等等此时也是根据日期来进行查询

对于这些需要在指定范围内快速或者频繁查询数据列需要为其建立索引索引已经排序其保存时候指定范围是连续查询可以利用索引排序加快查询时间减少用户等待时间

不过若虽然可能需要按范围来进行查询但是若这个范围查询条件利用不多情况下最好不好采用索引如在员工信息表中可能需要查询2008 年3月份以前入职员工明细要为他们增加福利但是由于表中记录不多而且也很少进行类似查询若维这个字段建立索引虽然无伤大雅但是很明显索引所获得收益要低于其成本支出对数据库管理员来说是得不偿失

再者若采用范围查询最好能利用TOP关键字来限制次查询结果如第次按顺序只显示前面500条记录等等把TOP关键字跟范围起使用可以大大提高查询效率

铁律 4:表中若有主键或者外键定要为其建立索引

定义有主键索引列定要为其建立索引主键可以加速定位到表中结合索引作用可以使得查询速度加倍如在员工信息表中我们往往把员工编号设置为主键这不但可以提高查询速度而且主键要求记录还可以保证员工编号此时若再把这个员工编号字段设置为索引则通过员工编号来查询员工信息其效率要比没有建立索引高出许多

另外若要使得某个字段值唯可以通过两种索引方式实现种就是上面所讲主键索引还有种就是唯索引利用UNIQUE关键字指定字段内容这两种方式都会在表中指定列上自动创建唯索引这两种方式结果没有明显区别查询优化器不会区分到底是哪种方式建立性索引而且他们进行数据查询方式也是相同

若某张表中数据列定义有外键则最好也要为这个字段建立索引外键主要作用就在于表和表的间连接查询若在外键上建立索引可以加速表和表的间连接查询如在员工基本信息表中个字段为员工职位由于员工职位经常在变化在这里存储其实只是个员工职位代码在另外张职位信息表中详细记录着该职位相关信息此时这个员工职位字段就是外键若在这个字段上建立外键则可以显著提高两张表连接速度而且记录越多其效果越加明显

所以当表中有外键或者主键时候就最好为其建立索引通过索引可以强化主键和外键作用提高数据库性能

铁律 5:对于些特殊数据类型不要建立索引

在表中有些字段比较特殊如文本字段(TXT)、图像类型字段(IMAGE)等等如果表中字段属于这些数据类型则最好不要为其建立索引这些字段有些共同特点如长度不确定要么很长几个;要么就是空如文本数据类型常在应用系统数据库表中用来做备注数据类型有时候备注很长但有时候又没有数据若这种类型字段上建立索引那根本起不了作用相反还增加了系统负担

所以些比较特殊数据类型上建立索引要谨慎在通常情况下没有必要为其建立索引但是也有特殊情况如有时候在ERP系统中有产品信息这个表其中有个产品规格这个字段有时候其长度可能长达5000个此时只有文本型数据类型可以容纳这么大数据量而且在查询时候用户又喜欢通过规格这个参数来查询产品信息此时若不为这个字段建立索引则查询速度会很慢遇到这种情况时数据库管理员只有牺牲点系统资源为其建立索引

从这里也可以看出虽然以上几条说时铁律但是是否需要遵循还是需要数据库管理员根据企业实际情况做出合理选择

铁律 6:索引可以跟Where语句集合融为

用户在查询信息时候有时会经常会用到些限制语句如在查询销售订单时候经常会用到客户以及下单日期条件集合;如在查询某个产品库存交易情况时就会利用产品编号和交易日期起止日期条件集合

对于这些经常用在Where子句中数据列将索引建立在Where子句集合过程中对于需要加速或者频繁检索数据列可以让这些经常参和查询数据列按照索引排序进行查询以加快查询时间

总的索引就好像把双刃剑即可以提高数据库性能也可能对数据库性能起到反面作用作为数据库管理员要有这个能力判断在合适时间、合适业务、合适字段上建立合适索引以上 6个铁律只是对建立索引些基本要求

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: