物理顺序与索引的顺序一致是聚集索引和非聚集索引的概念,但是什么是索引的顺序,请大神赐教,最好能举例

数据库索引技术-----聚集索引和非聚集的区别和建立原则
聚集索引和非聚集的区别
聚集索引和非聚集索引的根本区别是数据记录的排列顺序和索引的排列顺序是否一致,聚集索引表记录的排列顺序与索引的排列顺序一致,优点是查询速度快,因为一旦具有第一个索引值的纪录被找到,具有连续索引值的记录也一定物理的紧跟其后,从而缩小了搜索范围,对于返回某一范围的数据效果最好。
聚集索引的缺点是对表进行修改速度较慢,这是为了保持表中的记录的物理顺序与索引的顺序一致,而把记录插入到数据页的相应位置,必须在数据页中进行数据重排,降低了执行速度。
  非聚集索引指定了表中记录的逻辑顺序,数据记录的物理顺序和索引的顺序不一致,聚集索引和非聚集索引都采用了B树的结构,但非聚集索引的叶子层顺序并不与实际的数据页相同,而采用指向表中的记录在数据页中位置的方式。非聚集索引比聚集索引层次多,添加记录不会引起数据顺序的重组。在有大量不同数据的列上建立非聚集索引,可以提高数据的查询和修改速度。
在对聚集索引列查询时,聚集索引的速度要比非聚集索引速度快。
在对聚集索引列排序时,聚集索引的速度要比非聚集索引速度快。但是如果数据量比较大时,如10万以上,则二者的速度差别不明显。
聚集索引和非聚集的建立原则
在创建索引时要做到三个适当,即在适当的表上、适当的列上创建适当数量的索引。虽然这可以通过一句话来概括优化的索引的基本准则,但是要做到这一点的话,需要做出很大的努力。具体的来说,要做到这个三个适当有如下几个要求。
根据表的大小来创建索引。
虽然给表创建索引,可以提高查询的效率。但是需要注意的是,索引也需要一定的开销的。为此并不是说给所有的表都创建索引,那么就可以提高数据库的性能。这个认识是错误的。给所有的表都创建了索引,那么其反而会给数据库的性能造成负面的影响。因为此时滥用索引的开销可能已经远远大于由此带来的性能方面的收益。所以,数据库管理员首先需要做到,为合适的表来建立索引,而不是为所有的表建立索引。
一般来说,不需要为比较小的表创建索引。因为即使建立了索引,其性能也不会得到很大的改善。相反索引建立的开销,如维护成本等等,要比这个要大。也就是说,付出的要比得到的多,显然违反常理。
另外,就是对于超大的表,也不一定要建立索引。有些表虽然比较大,记录数量非常的多。但是此时为这个表建立索引并一定的合适。对于一些超大的表,建立索引有时候往往不能够达到预计的效果。而且在大表上建立索引,其索引的开销要比普通的表大的多。那么到底是否给大表建立索引呢?主要是看两个方面的内容。首先是需要关注一下,在这张大表中经常需要查询的记录数量。一般来说,如果经常需要查询的数据不超过10%到15%的话,那就没有必要为其建立索引的必要。因为此时建立索引的开销可能要比性能的改善大的多。如果数据库管理员需要得出一个比较精确的结论,那么就需要进行测试分析。
根据列的特征来创建索引
列的特点不同,索引创建的效果也不同。需要了解为哪些列创建索引可以起到事半功倍的效果。同时也需要了解为哪些列创建索引反而起到的是事倍功半的效果。
索引设置的是否恰当,不仅跟数据库设计架构有关,而且还跟企业的经济业务相关。虽然一开始已经做了索引的优化工作。但是随着后来经济数据的增加,这个索引的效果会越来越打折扣。所以需要隔一段时间,对数据库的索引进行优化。该去掉的去掉,该调整的调整,以提高数据库的性能。
在一个表上创建多少索引合适
通常来说,表的索引越多,其查询的速度也就越快。但是,表的更新速度则会降低。这主要是因为表的更新同时也是索引的更新。到底在表中创建多少索引合适,就需要在这个更新速度与查询速度之间取得一个均衡点。如对于一些数据仓库或者决策型数据库系统,其主要用来进行查询。相关的记录往往是在数据库初始化的时候导入。此时,设置的索引多一点,可以提高数据库的查询性能。同时因为记录不怎么更新,所以索引比较多的情况下,也不会影响到更新的速度。相反,如果那些表中经常需要更新记录,如一些事务型的应用系统,数据更新操作是家常便饭的事情。此时如果在一张表中建立过多的索引,则会影响到更新的速度。由于更新操作比较频繁,所以对其的负面影响,要比查询效率提升要大的多。此时就需要限制索引的数量,只在一些必要的字段上建立索引。
总之,在适当的表、适当的列上建立适当的索引。具体的索引优化内容还是需要在日常工作中继续体会与总结。
下面的表总结了何时使用聚集索引或非聚集索引:
使用聚集索引
使用非聚集索引
列经常被分组排序
返回某范围内的数据
一个或极少不同值
小数目的不同值
大数目的不同值
频繁更新的列
频繁修改索引列
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。弦月下的SQL&6& 索引和视图
弦月下的SQL&6& 索引和视图
弦月下的SQL
索引:可以不必翻阅表中的每一个内容就可以找到对象。
聚集索引:表中数据行的物理存储顺序和索引顺序完全相同,即索引的顺序决定了表中行的存储顺序。只能有一个聚集索引。最好在其他非聚集索引建立前建立聚集索引,以免因为物理顺序的改变而重新构造非聚集索引。默认情况下,如果表中没有创建其他索引,那么表的主键自动创建聚集索引。
&&&&&&非聚集索引:不改变表中数据行的物理存储顺序,数据和索引分开存储。在非聚集索引中仅仅记录索引值和指向数据行的指针。非聚集索引作为和表分离的对象独立存在,可以为表中每一个常用于查询的列定义非聚集索引。
聚集索引和非聚集索引的特性:
注意:聚集索引和非聚集索引都可以创建为唯一索引或者组合索引。
唯一索引:SQL&Server确保被索引列不存在重复性。
组合索引:根据表中两列或者多列组合创建的索引。
1、创建索引
create&unique&index&au_cname&ON&course(c_name)
2、查看表中索引
sp_helpindex&course
3、删除表中指定的索引&
drop&index&course.au_cname
针对某查询结果的虚拟表,其内容由查询定义。视图并不存在存储数据,实际上是对表中存储数据的引用。通过创建视图的时候,定义视图的查询语句来实现的。
视图的概念
从一个或者多个相关联表或者视图中派生出来的。其具备以下特点:
(1)着重于特定数据
(2)简化数据操作
(3)自定义数据
(4)导入和导出数据
(5)跨服务区组合分区数据
4、创建视图
create&view&V1
select&c_name,c_teach
from&course
5、从多个表中选取数据组成视图
create&view&V3
select&s_name,c_name,a_id
from&student,course,average
where&student.s_no=average.a_no
&&&&&and&&course.c_id=average.a_id
6、利用代码查询视图
sp_help&V1
7、查询构造视图的代码
sp_helptext&V1
8、更改视图的名字
sp_rename&V2,new_V2
9、对视图进行修改
alter&view&new_V1
select&c_id,c_name
from&course
where&c_name='magic'
10、对视图进行删除
drop&view&new_V1
我的热门文章
即使是一小步也想与你分享您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
第八章索引.ppt19页
本文档一共被下载:
次 ,您可免费全文在线阅读后下载本文档
文档加载中...广告还剩秒
需要金币:200 &&
你可能关注的文档:
··········
··········
数据库原理及开发 第八章 索引 * * * * * LOGO ―
学习目标 Chapter8.索引 掌握索引的概念 了解索引的作用 掌握索引的建立和管理 8.1 索引的分类
索引包含从表或视图中一个或多个列生成的键,以及映射到指定数据的存储位置的指针
索引的作用: ①通过创建唯一索引,可以保证数据记录的唯一性。 ②可以大大加快数据检索速度。 ③可以加速表与表之间的连接,这一点在实现数据的参照完整性方面有特别的意义。 ④在使用ORDER BY和GROUP BY子句中进行检索数据时,可以显著减少查询中分组和排序的时间。 ⑤使用索引可以在检索数据的过程中使用优化隐藏器,提高系统性能。
索引的分类
聚集索引是指数据行的物理存储顺序与索引的顺序完全相同,即索引的顺序决定了表中行的存储顺序。
因为记录是经过排序的,所以在每个表上只能创建一个聚集索引。 1.聚集索引
如果表中没有建立聚集索引,则在对表建立主键约束时会自动创建一个聚集索引。
从索引表的物理顺序、属性列的重复值以及索引列中所包含的列数等不同角度,可以把索引分为聚集索引和非聚集索引、唯一索引和非唯一索引、单列索引和复合索引。
非聚集索引具有完全独立于数据行的结构,即索引中的逻辑顺序并不等同于表中行的物理顺序。非聚集索引仅仅记录指向表中行的位置指针,通过指针可以快速在表中定位数据行。
非聚集索引作为与表独立的对象存在,可以为表中每一个常用于查询的列定义非聚集索引。 2.非聚集索引
在一个列上设置唯一性约束时也自动在该列上创建非聚集索引。
唯一索引确保被索引的列不包含NULL在内的重复值。如果被索引的列是多个列的组合,那么唯
正在加载中,请稍后...

我要回帖

更多关于 大神请赐教 的文章

 

随机推荐