注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

数据库索引  

2013-10-23 21:44:16|  分类: 数据库技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

数据库索引

大家都知道数据库的索引,分为聚簇(集)索引和非聚簇(集)索引。前者就是指数据的排列顺序和物理的排列顺序一致,后者则不是。后者可以有多个(249),前者只能有一个。聚集索引形象的表示就象是按字母排序。而非聚集索引就象是按部首查字。

索引的目的很简单,就是为了能更高效的组织数据,方便查询,索引也有太好的地方,对于一个数据表如果频繁的更新删除,数据表要定时进行索引的重建,否则索引的效果会大打折扣。

现在再说一个唯一索引,唯一索引,顾名思义,就是指索引的值是唯一的,不允许有重复,这个可得分清楚喽,和主键有相似的地方,但不是一回事。一个表的不同列可以有不同的唯一索引。也就是说,一个表可以有多个唯一索引。

在上面三种索引中,讲一下聚集索引和唯一索引的关系。

聚集索引可以是唯一索引,也可以不是。大家可以建立一张表,不建立主键,这样可以更容易的来区别两种索引。

比如有一列ID,你把它设置成聚焦索引,但不是唯一的,你可以不断的重复的插入相同的值,不会引起任何错误。

但是,当你把它设置成聚集并且是唯一索引时,再插入相同元素,那么这个列提交时,便会报一个在唯一索引中不能创建相同的元素。

需要大家引起注意的是:视图上的聚集索引必须是 UNIQUE 索引

既然有唯一索引就会有下面这个关键字:IGNORE_DUP_KEY

这个字的目的很简单,比如有两个表AB,这两表的结构完全相同,有时候会有下面的SQL语句产生:

INSERT INTO A SELECT * FROM B;

这时候,如果是唯一的索引,一定会产生异常,你觉得是整个回滚退出好还是只把重复的数据不插入好呢?这就是这个关键字的作用。

CREATE UNIQUE NONCLUSTERED INDEX AK_Product_Name ON Production.Product ( [Name]

) WITH ( IGNORE_DUP_KEY = OFF );

最后的红色部分,是默认的,也就是说,在上面的SQL插入语句中,只有重复的数据被忽略掉,其它数据都可以正确的从B表倒入A表。并且在这个过程中,只有警告信息。

 

日积月累。

  评论这张
 
阅读(356)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017