谈“索引”

原创 2006年05月28日 19:30:00

谈“索引”
(一)创建索引
对于数据库中较小的表来说,使用扫描原始数据的方法可以工作很好,然而,当数据量变大时,就必须使用索引来提高数据检索的速度。
在考虑索引的创建时,需要注意的是:提高查找速度与提高更新速度是相互矛盾的。索引可以极大地提高读取数据的速度,但在写数据时,它们却会带来额外的工作。
使用图形界面工具创建和管理索引的方法主要有下面3种:
1.     创建索引向导。可以从向导列表中启动它。
2.     使用索引管理器。与创建索引向导相比,企业管理器的索引管理器是一个非常出色的工具,可以使用它来查看和管理一个表的所有索引。打开它的方法是:选择一个表,然后右击或者“操作”菜单上选择“所有任务”〉“管理索引”菜单项即可。
3.     表的“属性”对话框。该对话框的“索引/键”选项卡就是用来完成这项工作的。(注意:这个“索引/键”选项卡的界面设计稍微有点问题,即在其顶部的组合框用于选择要修改的索引,但却没有“确定”或者“应用”按钮,但无论在其中输入什么,都会随同在表设计器中所做的其它改变一起应用到表上的。
(二)理解索引
SQL Server使用两种基本类型的索引:聚集索引和非聚集索引。这两种索引都可以对多个列进行索引,在这种情况下也可以称它们为组合索引。
1.     非聚集索引。在代码中创建非聚集索引的方法是:使用CREATE INDEX DDL命令,并指定相应的索引名,以及要进行索引的表和列。如:
CREATE NONCLUSTERED INDEX IxOrderNumber
   ON dbo.[Order] (OrderNumber)
       在计算列上也可以创建索引,但是,如果想要在计算列或者索引视图上创建和修改索引,必须先将quoted_identifier选项设置为on
2.     聚集索引。聚集索引将表中的记录行与索引键值以同样的顺序加以存储。电话簿就是一个很好的聚集索引的例子,其中数据和索引都以同样的顺序加以存储。在聚集索引的内部,SQL Server合并了索引页的叶节点与数据页,也正由于数据只可能有一种物理存储顺序,因此每个表只能有一个聚集索引。
注:(1)合并聚集索引的叶节点与数据具有两个作用。首先,通过聚集索引检索数据只需要更少的逻辑读取的次数。其次,任意非聚集索引都将指向聚集索引的ID,而不再需要指向数据页。
 (2)聚集索引将具有同样索引键值的记录行集中到尽可能少的数据页中,因而减少了检索一组记录时需要读取数据的页数,基于同样的原因,对于只返回一行记录的查询,使用聚集索引将不会明显地提高性能。从中我们可总结出:因为在每个表上只能创建一个聚集索引,所以它也是一种宝贵的性能资源,只有在那些经常作为条件查询一组记录行的列上才应该建立聚集索引。
在代码中创建聚集索引的方法与创建非聚集索引的方法非常类似,如:
CREATE CLUSTERED INDEX IxOrderID
   ON dbo.OrderDetail (OrderID)
删除索引的方法是:使用DROP INDEX命令,并指定相应的表名和索引名:
DROP INDEX OrderDetail.IxOrderID
3. 组合索引。组合索引是拥有多个索引列的聚集或者非聚集索引,正因如此,只有在创建表之后,才能使用CREATE INDEX DDL命令来创建它们。如:
CREATE CLUSTERED INDEX IxGuideName
   ON dbo.Guide (LastName, FirstName)
在组合索引中,索引列排列的先后顺序非常重要。因为,只有这样的一些查询才能够使用组合索引:它们在查询条件中所包含的索引列在组合索引中是从第一个索引列开始按照从左到右的顺序依次排列的。
最后,在文章快结束的时候,再介绍一点(这一点好好重要噢!~):索引填充因子(FillFactor)应该设置为多少才最合适,取决于数据库的用途。如果数据库主要用于数据检索,就应当将填充因子设置为较大的值以尽可能填满一个索引页的空间;反之,如果需要对表进行大量的插入操作,在索引页上保留一些空间就可以提高更新操作的性能;还有,如果对于表插入操作的数量变化幅度较大,将填充因子设置为一个中间的值,并选择填充索引(PAD_INDEX)选项就比较合适了!
CREATE INDEX命令中也可以指定填充因子和填充索引选项。例如下面的代码在[Order]表的OrderNumber列上创建一个索引,并指定在叶节点和中间级节点上都保留15%的自由空间:
CREATE NONCLUSTERED INDEX IxOrderNumber
     ON dbo.[Order] ((OrderNumber)
         WITH TILLFACTOR=85, PAD_INDEX
好了,今天就到这里吧!我去吃饭了,哈哈!~
 
 

面试时候索引问题回答

原帖链接: http://topic.csdn.net/u/20120730/15/b682aa5b-1672-4a90-b6c7-91430313eb2f.html?seed=856407833&...
  • tanguang_honesty
  • tanguang_honesty
  • 2013年06月13日 11:17
  • 2500

谈索引

索引,索,检索之意,引,引用之意。百度百科的解释如下: 索引,指将文献中具有检索意义的事项(可以是人名、地名、词语、概念、或其他事项)按照一定方式有序编排起来,以供检索的工具书。从上面的文字解释中,...
  • KuaiLeShiFu
  • KuaiLeShiFu
  • 2015年09月26日 22:16
  • 333

JavaScript 模块化七日谈

地址 : http://huangxuan.me/2015/07/09/js-module-7day/ 第一日 上古时期 Module? 从设计模式说起第二日 石器时代 Script...
  • jianfpeng241241
  • jianfpeng241241
  • 2016年06月19日 20:50
  • 725

项目如何开始:怎样和客户谈需求(转)

转载自:http://blog.163.com/jeson_lwj/blog/static/13576108320121755727574/ 三种客户类型: 1 的确很专业。能提供基本...
  • u012377333
  • u012377333
  • 2016年09月14日 18:05
  • 1191

乱谈2--索引

索引是数据库中最基本的对象之一,我相信没有哪个生产数据库是完全没有索引的。索引存在的目的就是加速数据的访问速度。如果索引没有起到提升数据访问速度的作用,那么这个索引就是没有用的,甚至是有害的。我见过许...
  • oratea
  • oratea
  • 2014年01月26日 09:48
  • 325

李开复谈人工智能

创新工场创始人李开复俨然已成为人工智能的布道者。他几乎言出必谈人工智能。在前不久的一场活动上,他直接说,我不是李开复,我是人工智能。        在30日由新京报主办的寻找中国创客第三季启动峰会...
  • hypercode
  • hypercode
  • 2017年03月31日 12:30
  • 838

离职面谈,何时谈最佳?

离职员工,即使是已经离开公司的员工,在某种意义上仍然可以是“潜在”的人力资源。而现实中,企业进行离职面谈的主要目的在于从离职员工那里获得相关信息,以便企业改进工作和维系与离职员工的良好关系,包含维系双...
  • Solmyr_biti
  • Solmyr_biti
  • 2016年02月17日 14:38
  • 859

也谈创新

前段时间经常听到有人提到《罗辑思维》里面的这样,那样的。于是乎我也入了“坑”, 这个“坑”还不错,就感觉罗胖看过的书真是太多了,就是传说中的博览全书啊。 其中有一期就是说“击溃牛顿的钟表匠”,这一期谈...
  • xuanwolanxue
  • xuanwolanxue
  • 2017年05月20日 12:56
  • 263

面试怎么谈薪资——让自己的利益最大化

面试者如何谈薪资&了解企业,得到利益最大化 当面试双方已经进入谈薪阶段,就应当抓紧机会,委婉地说出自己的期望值。 一、应聘者在谈薪酬时常见以下问题 1、面试者“防范意识”不强 有些...
  • Lunaqi
  • Lunaqi
  • 2017年08月23日 10:21
  • 1264

怎样与领导谈加薪以及谈加薪的技巧

【与领导谈判时,这些忌讳千万别犯呦!】 ①不和任何人比较; ②不打听他人工资; ③不以私人原因阐述自己的加薪理由,如:物价上涨、生活困难等; ④不威胁老板或上级;(要知道,成就一个人很难,毁一...
  • suxinpingtao51
  • suxinpingtao51
  • 2015年04月15日 17:27
  • 959
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:谈“索引”
举报原因:
原因补充:

(最多只允许输入30个字)