Clustered和Nonclustered Indexes 各自得特点和区别及长短处

1 簇索引
簇索引对表的物理数据页中的数据按列进行排序然后再重新存储到磁盘上即簇索
引与数据是混为一体的它的叶节点中存储的是实际的数据由于簇索引对表中的数据一
一进行了排序因此用簇索引查找数据很快但由于簇索引将表的所有数据完全重新排列
了它所需要的空间也就特别大大概相当于表中数据所占空间的120%   表的数据行只
能以一种排序方式存储在磁盘上所以一个表只能有一个簇索引 
 2   非簇索引
非簇索引具有与表的数据完全分离的结构使用非簇索引不用将物理数据页中的数据
按列排序非簇索引的叶节点中存储了组成非簇索引的关键字的值和行定位器行定位器
的结构和存储内容取决于数据的存储方式如果数据是以簇索引方式存储的则行定位器
中存储的是簇索引的索引键如果数据不是以簇索引方式存储的这种方式又称为堆存储
方式Heap   Structure   则行定位器存储的是指向数据行的指针非簇索引将行定位器
按关键字的值用一定的方式排序这个顺序与表的行在数据页中的排序是不匹配的
由于非簇索引使用索引页存储因此它比簇索引需要更多的存储空间且检索效率较
低但一个表只能建一个簇索引当用户需要建立多个索引时就需要使用非簇索引了
从理论上讲一个表最多可以建249  个非簇索引。

使用聚集索引
聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,后者按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。 
聚集索引对于那些经常要搜索范围值的列特别有效。使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行在物理相邻。例如,如果应用程序执行的一个查询经常检索某一日期范围内的记录,则使用聚集索引可以迅速找到包含开始日期的行,然后检索表中所有相邻的行,直到到达结束日期。这样有助于提高此类查询的性能。同样,如果对从表中检索的数据进行排序时经常要用到某一列,则可以将该表在该列上聚集(物理排序),避免每次查询该列时都进行排序,从而节省成本。 
当索引值唯一时,使用聚集索引查找特定的行也很有效率。例如,使用唯一雇员   ID   列   emp_id   查找特定雇员的最快速的方法,是在   emp_id   列上创建聚集索引或   PRIMARY   KEY   约束。 

使用非聚集索引
非聚集索引与课本中的索引类似。数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置。索引中的项目按索引键值的顺序存储,而表中的信息按另一种顺序存储(这可以由聚集索引规定)。如果在表中未创建聚集索引,则无法保证这些行具有任何特定的顺序。 
与使用书中索引的方式相似,Microsoft®   SQL   Server™   2000   在搜索数据值时,先对非聚集索引进行搜索,找到数据值在表中的位置,然后从该位置直接检索数据。这使非聚集索引成为精确匹配查询的最佳方法,因为索引包含描述查询所搜索的数据值在表中的精确位置的条目。如果基础表使用聚集索引排序,则该位置为聚集键值;否则,该位置为包含行的文件号、页号和槽号的行   ID   (RID)。例如,对于在   emp_id   列上有非聚集索引的表,如要搜索其雇员   ID   (emp_id),SQL   Server   会在索引中查找这样一个条目,该条目精确列出匹配的   emp_id   列在表中的页和行,然后直接转到该页该行。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MySQL和SQL Server是两种不同的关系型数据库管理系统。它们的语句有一些区别,主要包括以下几点: 1. 数据类型:MySQL和SQL Server支持的数据类型有所不同,例如MySQL支持的数据类型包括TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT等,而SQL Server支持的数据类型包括TINYINT、SMALLINT、INT、BIGINT、FLOAT、REAL、NUMERIC、DECIMAL等。 2. 语法:MySQL和SQL Server的语法也有所不同,例如MySQL使用LIMIT语句来限制查询结果的数量,而SQL Server使用TOP语句来实现同样的功能。 3. 存储过程:MySQL和SQL Server的存储过程语法也有所不同,例如MySQL使用DELIMITER语句来定义存储过程的结束符,而SQL Server使用GO语句来分隔多个语句。 4. 索引:MySQL和SQL Server的索引语法也有所不同,例如MySQL支持FULLTEXT索引,而SQL Server则支持CLUSTEREDNONCLUSTERED索引。 总之,MySQL和SQL Server虽然都是关系型数据库管理系统,但它们的语句有一些区别,需要根据具体情况进行选择和使用。 ### 回答2: MySQL和SQL Server是两种常见的关系型数据库管理系统。虽然它们都使用结构化查询语言(SQL)作为操作语言,但实际上存在一些区别。 1.数据类型 MySQL支持的数据类型包括整数(INT和BIGINT),字符(VARCHAR和TEXT)和日期时间(DATETIME和TIMESTAMP)等。而SQL Server还支持二进制大对象(BLOB)、XML、空间和地理位置数据类型等。SQL Server的数据类型比MySQL更多,更加丰富、多样。 2.表和索引 MySQL默认使用的存储引擎是MyISAM,SQL Server默认使用的存储引擎是B-tree。MySQL中创建表和索引时,可以指定不同的存储引擎,而SQL Server只有一种默认的B-tree存储引擎。 3.编程语言 MySQL是用C和C++编写的。使用MySQL的话,可以使用C、C++、PHP、Java、Python等编程语言来操作数据库。而SQL Server一般结合使用MS SQL和Microsoft Visual Studio等编程工具,使用.NET框架来与数据库进行交互。因此,对于不同的编程语言,其操作MySQL和SQL Server的语法会有一定的差别。 4.性能和扩展性 MySQL适合处理大量的并发查询,但对于大量并发插入、更新和删除的操作支持相对较弱。而SQL Server则适用于复杂的联合查询和深度数据分析,其对于大量并发插入、更新和删除的操作支持更加完善。当然,这也取决于所应用的硬件环境和应用场景。 总之,MySQL和SQL Server是两种不同的数据库管理系统,而在操作语言使用上,它们还是存在一些区别的。但无论是哪种数据库管理系统,应用场景的不同也会影响到其使用差异,应根据实际需求来选择合适的数据库管理系统。 ### 回答3: MySQL和SQL Server都是常用的关系型数据库管理系统,都支持SQL语言作为操作数据库的主要语言。但是,两者在SQL语言的标准化实现和特有拓展方面存在差异,导致了一些语句的在两者之间的不兼容。 1. 数据类型 MySQL和SQL Server在数据类型的定义方面存在差异。例如:MySQL中的auto_increment可以设置为BIGINT类型,而在SQL Server中只支持INT类型;又如:MySQL中的ENUM类型可以存储枚举值,而SQL Server中没有类似的数据类型。 2. 函数 在函数方面,MySQL和SQL Server都有很多自己的函数,但是有些函数名在两者之间存在差别。例如:MySQL中的DATE_FORMAT函数用于将日期格式化,而SQL Server中的DATENAME则返回日期的名称。 3. 子查询 MySQL和SQL Server对子查询的支持也有所不同。MySQL允许在select、from、where子句中任何位置使用子查询,并且认为子查询中的表是对外不可见的;而SQL Server只允许在from和where子句中使用子查询,并把子查询中的表看作一个临时表。 4. 字符串拼接 字符串拼接在开发中是常用的操作之一,但是在MySQL和SQL Server中实现方式不一。MySQL使用concat函数完成字符串拼接,SQL Server使用+号来拼接字符串。 5. 索引 在索引的创建方面,MySQL和SQL Server也存在差异。MySQL中可以为一个列创建多个索引,而SQL Server的一个列只能创建一个索引。此外,SQL Server中可以为一个视图创建索引,而MySQL中则不能。 总的来说,MySQL和SQL Server在语句的实现和特有扩展上存在差异,开发者在操作时应该注意到这些差别,在实际开发中要结合实际情况选择适合的数据库,并根据不同的场景选择相应的操作语句。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值