聚集索引和非聚集索引的区别有哪些
数据库应用技术——SQLServer2008篇第3版习题答案作者延霞徐守祥习题参考答案

第一章:1、订单管理系统的功能有哪些?答:订单管理系统的功能主要有客户查询商品信息、客户预订商品并提交订单、销售人员处理客户的订单信息、销售人员管理商品信息、客户信息等。
2、说明ER模型的作用?答:ER模型(实体关系模型)是描述概念世界,建立概念世界的工具,ER方法把管理系统所要描述的问题划分为单个的实体,通过实体间的联系实现有效、自然地模拟现实世界。
3、什么是关系模型?关系的完整性包括哪些内容?答:关系模型就是用二维表格结构来表示实体及实体之间联系的模型,关系模型包括四类完整性:域完整性、实体完整性、参照完整性和用户定义的完整性。
4、按照功能,SQL语言分为哪4部分?答:按照功能,SQL语言分为数据定义语言、查询语言、数据操纵语言、数据控制语言。
5、规范化范式是依据什么来划分的?它与一事一地的原则有什么联系?答:规范化范式根据一个关系满足数据依赖的程度不同,可规范化为第一范式(1NF)、第二范式(2NF)、第三范式(3NF)。
规范化范式遵循一事一地的原则,将描述一个独立事物的属性组成一个关系。
第二章:1、SQL Server2008有哪些新增特性?答:见教材17页2、SQL Server2008安装的软件和硬件环境是什么?答:参见教材表2-3、2-4、2-5、2-6。
3、SQL Server2008有哪些版本?有哪些服务组件?答:Microsoft SQL Server2008系统提供了多个不同的版本,不同的应用需求,往往需要安装不同的版本。
既有32位的版本,也有64位的版本,既有正式使用的服务器版本,也有满足特殊需要的专业版本。
其中,服务器版本包括了企业版和标准版,专业版本主要包括开发人员版、工作组版、Web版、Express版、Compact版等。
另外,还有企业评估版。
服务组件主要有SQL Server数据库引擎、Analysis Services、Reporting Services、Notification Services、Integration Services等。
主键、唯一索引、聚集索引和非聚集索引的说明

主键、唯一索引、聚集索引和非聚集索引的说明在使用SQL数据库时,为了提高检索数据的效率,确保数据唯一性,往往会建立适当的索引。
在建立索引过程中,我们需要了解4个基本的索引关键词:主键、唯一索引、聚集索引和非聚集索引。
一、主键主关键词,是一种约束,用于唯一地标志表中的某一条记录,具有唯一性,不能重复,也不能为空(NULL)。
一张表只能有一个主键。
主键在创建时,该列会被默认同时创建唯一索引和聚集索引(在表中尚未创建聚集索引时)。
若在表中已存在其他某列为聚集索引时,被创建主键的那一列则默认同时创建唯一索引和非聚集索引。
这说明,主键与聚集索引并不是必须绑定的。
二、唯一索引唯一索引是一种索引,它不一定是主键,它的作用是确保列的唯一性。
唯一索引列允许空值(NULL)。
一张表可以创建多个唯一索引。
三、聚集索引聚集索引基于数据行的键值,在表内排序和存储这些数据行。
在聚集索引中,表中行记录的物理排列顺序与聚集索引的键值顺序一致,因此每张表只能建立一个聚集索引。
简单来说,聚集索引就是物理排列,以新华字典做比喻,字典中的字都是按照拼音字母顺序排列,因此可以将按拼音字母排列视为聚集索引的顺序,是与实际存储字的物理顺序是一致的。
聚集索引可以同时是唯一索引。
四、非聚集索引因为一张表中只能存在一个聚集索引,因此可以在表中建立多个非聚集索引实现数据快速检索。
表中的数据并不按照非聚集索引列的顺序存储,但非聚集索引的索引行中保存了非聚集键值和行定位器,可以快捷地根据非聚集键的值来定位记录的存储位置。
同样以新华字典做比喻,非聚集索引查找记录的方式,即为通过偏旁部首查找字。
字的物理顺序并不按照偏旁部首的顺序排列,但是可以通过偏旁部首定位到字。
非聚集索引可以同时是唯一索引。
五、总结(1)主键一定是唯一的,但是不一定是聚集索引或非聚集索引。
(2)唯一索引可以是主键,也可以是聚集索引或非聚集索引。
(3)聚集索引一张表最多只能存在一列,可以是唯一或不唯一。
两种基本索引类型

两种基本索引类型:
顺序索引:基于值的顺序排序。
散列索引:基于将值平均分布到若干散列桶中。
顺序索引
聚集索引:索引顺序和物理存储顺序相同,又称为“主索引”
非聚集索引:索引顺序与物理存储顺序不同,又称为“辅助索引”
稠密索引:文件中每个搜索码值都有一个索引记录
稀疏索引:只为搜索码的某些值建立索引
辅助索引必须是稠密索引,而聚集索引可以是稀疏索引。
稠密索引能够比稀疏索引更快的定位一条记录。
但是,稀疏索引相比于稠密索引的优点是:它所占空间更小,且插入和删除时的维护开销也小。
设计者必须在存储时间和空间开销之间权衡,为每个块建立一个稀疏索引是一个比较好的折中。
因为处理数据库请求的开销主要是把块从磁盘读到主存中的时间决定。
一旦把块放入主存,扫描整个块的时间可以忽略。
数据库课本简答

第一章1、什么是数据库、数据库管理系统以及数据库系统?它们之间有什么联系?数据库是指数据库系统中按照一定的方式组织的,存储在外部存储设备上的能为多个用户共享的、与应用程序和互相独立的相关数据集合。
数据库管理系统是用于建立、使用和维护数据库的软件。
数据库系统是指由硬件设备、软件系统、数据库和管理人员构成的一个运行系统。
2、实体之间的联系有哪几种?分别举例说明。
一对一联系1:1,例:一个厂只有一个厂长,一个厂长只在一个厂任职。
一对多联系1:m,例:一个公司只有多个职员,一个职员只能在一个公司就职。
多对多联系m:n,例:一个读者可以读多种图书,任何一种图书可以为多个读者借阅。
3、什么是数据模型?目前数据库的逻辑模型主要有哪几种?它们各有何特点?数据模型是对现实世界中数据的抽象,它表现为一些关系数据组织的集合。
种类:概念模型,逻辑模型,物理模型。
特点,概念模型:按用户观点对数据和信息进行建模,描述现实的概念化结构;逻辑模型按计算机观点对数据进行建模服务于DBMS的应用实现;物理模型数据库在物理存储介质上的组织结构。
第二章1、实体:是现实世界中任何可区分可识别的事物。
2、实体属性:实体的特征称为属性。
区别于关系属性:二维表的每一列在关系中称为属性3、关键字:关系中能够唯一区分确定不同元组的单个属性或属性组合称为该关系的一个关键字。
又被称为键或码(key)。
4、主关键字:在候选关键字中选定一个作为关键字,称为该关系的主关键字或主键。
5、外部关键字:如果关系中某个属性或属性组合并非本关系中的关键字但却是另一个关系中的关键字,这样的属性或属性组合被称为本关系中的外部关键字或外键。
6、关系模型:采用二维表描述实体的静态特征及其相互联系。
用表的行描述实体对象用元素描述对象的相应属性。
有关系运算规则和完整性约束规则来限制。
7、数据约束:是SQL Server提供的自动保持数据库中数据完整性的一种机制它定义了可输入表或表的单个列中的数据限制条件。
SQLSERVER聚集索引非聚集索引区别

SQLSERVER聚集索引⾮聚集索引区别⼀、理解索引的结构 索引在数据库中的作⽤类似于⽬录在书籍中的作⽤,⽤来提⾼查找信息的速度。
使⽤索引查找数据,⽆需对整表进⾏扫描,可以快速找到所需数据。
微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和⾮聚集索引(nonclustered index,也称⾮聚类索引、⾮簇集索引)。
SQL Server 中数据存储的基本单位是页(Page)。
数据库中的数据⽂件(.mdf 或 .ndf)分配的磁盘空间可以从逻辑上划分成页(从 0到 n 连续编号)。
磁盘 I/O 操作在页级执⾏。
也就是说,SQL Server 每次读取或写⼊数据的最少数据单位是数据页。
下⾯我们先简单的了解⼀下索引的体系结构: 1. 聚集索引结构 在 SQL Server 中,索引是按 B 树结构进⾏组织的。
聚集索引单个分区中的结构:--建⽴UserAddDate聚集索引CREATE CLUSTERED INDEX [IX_AddDate] ON [User]([AddDate] ASC) 聚集索引的叶节点就是实际的数据页聚集索引中的排序顺序仅仅表⽰数据页链在逻辑上是有序的。
⽽不是按照顺序物理的存储在磁盘上⾏的物理位置和⾏在索引中的位置是相同的每个表只能有⼀个聚集索引聚集索引的平均⼤⼩⼤约为表⼤⼩的5%左右 2. ⾮聚集索引结构 ⾮聚集索引与聚集索引具有相同的 B 树结构,它们之间的显著差别在于以下两点: 1. 基础表的数据⾏不按⾮聚集键的顺序排序和存储。
2. ⾮聚集索引的叶层是由索引页⽽不是由数据页组成。
下图⽰意了单个分区中的⾮聚集索引结构: 包含列的索引 通过将包含列(称为⾮键列)添加到索引的叶级,可以扩展⾮聚集索引的功能。
键列存储在⾮聚集索引的所有级别,⽽⾮键列仅存储在叶级别。
下⾯举个简单的例⼦来说明⼀下聚集索引和⾮聚集索引的区别: 我们有⼀本汉语字典,可以把它的正⽂本⾝看做是⼀个聚集索引,它是按照汉字拼⾳的开头字母排序的,不再需要查找其他⽬录。
数据库聚集索引和非聚集索引

数据库聚集索引和非聚集索引
数据库聚集索引和非聚集索引
1.什么是聚集索引
聚集索引(clustered index)是一种特殊的索引,它可以把数据表中的记录按照关键字排序,使得索引有序而连续。
一个数据表只能有一个聚集索引,也就是说,一个数据表只能有一种排序方式。
每次插入一条新的记录,都会建立一个新的索引,来保持整个索引的顺序。
查询时,聚集索引会把查询的结果以排好序的方式返回给客户端,从而提高查询效率。
2.什么是非聚集索引
非聚集索引(non-clustered index)是一种用来加速查询的数据库结构,它实际上是一个指向真实数据表的索引,提供了查询时可以快速定位真实数据表中记录的功能。
非聚集索引本身没有任何排序,而是按照索引的键,建立一种新的排列顺序,以便快速检索数据。
非聚集索引可以提高查询效率,但是其建立的额外空间开销比聚集索引要大。
3.聚集索引与非聚集索引的区别
(1)聚集索引实际上是表中的数据,而非聚集索引只是一个指向真实数据表的索引。
(2)聚集索引自身有序,而非聚集索引本身没有任何排序,但是按照索引的键可以快速检索数据。
(3)一个数据表只能有一个聚集索引,而一个数据表可以有多
个非聚集索引。
(4)聚集索引的建立需要消耗更多的空间,而非聚集索引的建立需要的空间更少。
聚集索引与非聚集索引的区别

聚集索引与非聚集索引的区别聚集索引(Clustered Index)和非聚集索引(Non-clustered Index)是数据库中两种不同类型的索引结构,它们在存储和组织数据上有一些显著的区别。
1. 定义:•聚集索引:聚集索引决定了数据表的物理顺序,表中的数据按照聚集索引的顺序存储在磁盘上。
每张表只能有一个聚集索引。
•非聚集索引:非聚集索引并不改变表中数据的物理存储顺序,而是在索引中存储指向实际数据行的指针。
一张表可以有多个非聚集索引。
2. 物理存储顺序:•聚集索引:表中的数据行按照聚集索引的顺序直接存储在磁盘上。
因此,聚集索引的构建会对表的物理存储结构产生影响。
•非聚集索引:表中的数据行的物理存储顺序与非聚集索引无关,数据行可能分散存储在磁盘上的不同位置。
3. 数据排序:•聚集索引:数据表按照聚集索引的顺序进行排序。
如果表按照聚集索引的某一列排序,那么这个索引就是聚集索引。
•非聚集索引:索引中的键值按照索引的顺序排序,但实际表中的数据行的排序不受索引的影响。
4. 查询性能:•聚集索引:由于数据行按照索引的顺序存储,某些范围查询、排序等操作可能更为高效。
但插入、更新等操作可能涉及到数据的移动,影响性能。
•非聚集索引:查询性能可能相对较好,因为索引的结构不会随着数据的变化而发生大的改变。
插入、更新等操作相对较快。
5. 主键约束:•聚集索引:如果表定义了主键,通常主键就是聚集索引。
•非聚集索引:如果表定义了主键,主键上的索引通常是非聚集索引。
总体来说,聚集索引和非聚集索引在数据的物理存储结构、排序方式和性能特点上存在显著的区别。
在选择索引类型时,需要根据具体的查询需求和数据修改频率进行权衡。
MySQL聚集索引和非聚集索引

MySQL聚集索引和⾮聚集索引介绍⼀MySQL的Innodb存储引擎的索引分为聚集索引和⾮聚集索引两⼤类,理解聚集索引和⾮聚集索引可通过对⽐汉语字典的索引。
汉语字典提供了两类检索汉字的⽅式,第⼀类是拼⾳检索(前提是知道该汉字读⾳),⽐如拼⾳为cheng的汉字排在拼⾳chang的汉字后⾯,根据拼⾳找到对应汉字的页码(因为按拼⾳排序,⼆分查找很快就能定位),这就是我们通常所说的字典序;第⼆类是部⾸笔画检索,根据笔画找到对应汉字,查到汉字对应的页码。
拼⾳检索就是聚集索引,因为存储的记录(数据库中是⾏数据、字典中是汉字的详情记录)是按照该索引排序的;笔画索引,虽然笔画相同的字在笔画索引中相邻,但是实际存储页码却不相邻。
正⽂内容按照⼀个特定维度排序存储,这个特定的维度就是聚集索引;Innodb存储引擎中⾏记录就是按照聚集索引维度顺序存储的,Innodb的表也称为索引表;因为⾏记录只能按照⼀个维度进⾏排序,所以⼀张表只能有⼀个聚集索引。
⾮聚集索引索引项顺序存储,但索引项对应的内容却是随机存储的;举个例⼦说明下:create table student (`id` INT UNSIGNED AUTO_INCREMENT,`name` VARCHAR(255),PRIMARY KEY(`id`),KEY(`name`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;该表中主键id是该表的聚集索引、name为⾮聚集索引;表中的每⾏数据都是按照聚集索引id排序存储的;⽐如要查找name='Arla'和name='Arle'的两个同学,他们在name索引表中位置可能是相邻的,但是实际存储位置可能差的很远。
name索引表节点按照name排序,检索的是每⼀⾏数据的主键。
聚集索引表按照主键id排序,检索的是每⼀⾏数据的真实内容。
也就是说查询name='Arle'的记录时,⾸相通过name索引表查找到Arle的主键id(可能有多个主键id,因为有重名的同学),再根据主键id的聚集索引找到相应的⾏记录;Mysql聚集索引和⾮聚集索引最简单的表述:聚集索引⼀般是表中的主键索引,如果表中没有显⽰指定主键,则会选择表中的第⼀个不允许为NULL的唯⼀索引,如果还是没有的话,就采⽤Innodb存储引擎为每⾏数据内置的6字节ROWID作为聚集索引。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
聚集索引和非聚集索引的区别有哪些
∙浏览:1837
∙|
∙更新:2013-08-13 01:09
SQL SERVER提供了两种索引:聚集索引和非聚集索引。
其中聚集索引表示表中存储的数据按照索引的顺序存储,检索效率比非聚集索引高,但对数据更新影响较大。
非聚集索引表示数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置,非聚集索引检索效率比聚集索引低,但对数据更新影响较小。
方法/步骤
1. 1
聚集索引:该索引中键值的逻辑顺序决定了表中相应行的物理顺序。
聚集索引确定表中数据的物理顺序。
聚集索引类似于电话簿,后者按姓氏排列数据。
由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。
但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。
2. 2
聚集索引使用注意事项
定义聚集索引键时使用的列越少越好。
• 包含大量非重复值的列。
.• 使用下列运算符返回一个范围值的查询:BETWEEN、>、>=、< 和<=。
• 被连续访问的列。
•回大型结果集的查询。
• 经常被使用联接或 GROUP BY 子句的查询访问的列;一般来说,这些是外键列。
对 ORDER BY 或 GROUP BY 子句中指定的列进行索引,可以使 SQL Server 不必对数据进行排序,因为这些行已经排序。
这样可以提高查询性能。
• OLTP 类型的应用程序,这些程序要求进行非常快速的单行查找(一般通过主键)。
应在主键上创建聚集索引。
3. 3
聚集索引不适用于:
• 频繁更改的列。
这将导致整行移动(因为 SQL Server 必须按物理顺序保留行中的数据值)。
这一点要特别注意,因为在大数据量事务处理系统中数据是易失的。
• 宽键。
来自聚集索引的键值由所有非聚集索引作为查找键使用,因此存储在每个非聚集索引的叶条目内。
4. 4
非聚集索引:数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置。
非聚集索引中的项目按索引键值的顺序存储,而表中的信息按另一种顺序存储(这可以由聚集索引规定)。
对于非聚集索引,可以为在表非聚集索引中查找数据时常用的每个列创建一个非聚集索引。
有些书籍包含多个索引。
例如,一本介绍园艺的书可能会包含一个植物通俗名称索引,和一个植物学名索引,因为这是读者查找信息的两种最常用的方法。
5. 5
一个通俗的举例,说明两者的区别
其实,我们的汉语字典的正文本身就是一个聚集索引。
比如,我们要查“安”字,就会很自然地翻开字典的前几页,因为“安”的拼音是“a n”,而按照拼音排序汉字的字典是以英文字母“a”开头并以“z”结尾的,那么“安”字就自然地排在字典的前部。
如果您翻完了所有以“a”开头的部分仍然找不到这个字,那么就说明您的字典中没有这个字;同样的,如果查“张”字,那您也会将您的字典翻到最后部分,因为“张”的拼音是“zhang”。
也就是说,字典的正文部分本身就是一个目录,您不需要再去查其他目录来找到您需要找的内容。
我们把这种正文内容本身就是一种按照一定规则排列的目录称为“聚集索引”。
如果您认识某个字,您可以快速地从自动中查到这个字。
但您也可能会遇到您不认识的字,不知道它的发音,这时候,您就不能按照刚才的方法找到您要查的字,而需要去根据“偏旁部首”查到您要找的字,然后根据这个字后的页码直接翻到某页来找到您要找的字。
但您结合“部首目录”和“检字表”而查到的字的排序并不是真正的正文的排序方法,比如您查“张”字,我们可以看到在查部首之后的检字表中“张”的页码是6 72页,检字表中“张”的上面是“驰”字,但页码却是63页,“张”的下面是“弩”字,页面是390页。
很显然,这些字并不是真正的分别位于“张”字的上下方,现在您看到的连续的“驰、张、弩”三字实际上就是他们在非聚集索引中的排序,是字典正文中的字在非聚集索引中的映射。
我们可以通过这种方式来找到您所需要的字,但它需要两个过程,先找到目录中的结果,然后再翻到您所需要的页码。
我们把这种目录纯粹是目录,正文纯粹是正文的排序方式称为“非聚集索引”。
6. 6
下面这张图总结了何时使用聚集索引或非聚集索引:
7.7
下面说说索引使用的几个误区和问题
第一:聚集索引的约束是唯一性,是否要求字段也是唯一的呢?
分析:如果认为是的朋友,可能是受系统默认设置的影响,一般我们指定一个表的主键,如果这个表之前没有聚集索引,同时建立主键时候没有强制指定使用非聚集索引,SQL会默认在此字段上创建一个聚集索引,而主键都是唯一的,所以理所当然的认为创建聚集索引的字段也需要唯一。
结论:聚集索引可以创建在任何一列你想创建的字段上,这是从理论上讲,实际情况并不能随便指定,否则在性能上会是恶梦。
第二:主键就是聚集索引
这样有时会对聚集索引的一种浪费。
虽然SQL SERVER默认是在主键上建立聚集索引的。
但是由于聚集索引的优势是很明显的,而每个表中只能有一个聚集索引的规则,这使得聚集索引变得更加珍贵。
从我们前面谈到的聚集索引的定义我们可以看出,使用聚集索引的最大好处就是能够根据查询要求,迅速缩小查询范围,避免全表扫描。
在实际应用中,因为 ID号是自动生成的,我们并不知道每条记录的ID号,所以我们很难在实践中用ID号来进行查询。
这就使让ID号这个主键作为聚集索引成为一种资源浪费。
其次,让每个ID号都不同的字段作为聚集索引也不符合“大数目的不同值情况下不应建立聚合索引”规则;当然,这种情况只是针对用户经常修改记录内容,特别是索引项的时候会负作用,但对于查询速度并没有影响。
第三:是不是聚集索引就一定要比非聚集索引性能优呢?
如果想查询学分在60-90之间的学生的学分以及姓名,在学分上创建聚集索引是否是最优的呢?
答:否。
既然只输出两列,我们可以在学分以及学生姓名上创建联合非聚集索引,此时的索引就形成了覆盖索引,即索引所存储的内容就是最终输出的数据,这种索引在比以学分为聚集索引做查询性能更好。
第四:在数据库中通过什么描述聚集索引与非聚集索引的?
索引是通过二叉树的形式进行描述的,我们可以这样区分聚集与非聚集索引的区别:聚集索引的叶节点就是最终的数据节点,而非聚集索引的叶节仍然是索引节点,但它有一个指向最终数据的指针。
第五:在主键是创建聚集索引的表在数据插入上为什么比主键上创建非聚集索引表速度要慢?
有了上面第四点的认识,我们分析这个问题就有把握了,在有主键的表中插入数据行,由于有主键唯一性的约束,所以需要保证插入的数据没有重复。
我们来比较下主键为聚集索引和非聚集索引的查找情况:聚集索引由于索引叶节点就是数据页,所以如果想检查主键的唯一性,需要遍历所有数据节点才行,但非聚集索引不同,由于非聚集索引上已经包含了主键值,所以查找主键唯一性,只需要遍历所有的索引页就行,这比遍历所有数据行减少了不少IO消耗。
这就是为什么主键上创建非聚集索引比主键上创建聚集索引在插入数据时要快的真正原因。