簇集索引=聚集索引:
在聚集索引下,
1 :聚集索引 (clustered index), 一种通过键值的逻辑顺序来确定表中相应行的物理顺序的索引。数据在物理上按顺序排在数据页上
2 :重复值也排列在一起,因而在范围查找时,可以先找到这个范围的起末点,且只在这个范围内扫描数据页,避免了大范围扫描,提高了查询速度。
3 :对于 聚集索引 ,将新行实际插入具有相似键值的现有行附近。这可改善查询性能,因为它导致数据页的存取模式更线性化,且产生更有效的预取。
4 :有大量重复值、且经常有范围查询 between, >,< ,>=,< =)和order by、group by发生的列,可考虑建立群集索引
5 :index的逻辑顺序与表中数据的物理顺序基本一致。这样的好处是,按照index来取数据时,磁头不会乱跑,从而提高了性能。
一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。
6 :两大优势:1、以最快的速度缩小查询范围。 2、以最快的速度进行字段排序。
7 :一定要将聚集索引建立在: 1、您最频繁使用的、用以缩小查询范围的字段上;
2、您最频繁使用的、需要排序的字段上。
聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,后者按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。
聚集索引对于那些经常要搜索范围值的列特别有效。使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行在物理相邻。例如,如果应用程序执行的一个查询经常检索某一日期范围内的记录,则使用聚集索引可以迅速找到包含开始日期的行,然后检索表中所有相邻的行,直到到达结束日期。这样有助于提高此类查询的性能。同样,如果对从表中检索的数据进行排序时经常要用到某一列,则可以将该表在该列上聚集(物理排序),避免每次查询该列时都进行排序,从而节省成本。
非簇集索引:
非聚集索引与聚集索引一样有 B 树结构,但是有两个重大差别:
数据行不按非聚集索引键的顺序排序和存储。
非聚集索引的叶层不包含数据页。
相反,叶节点包含索引行。每个索引行包含非聚集键值以及一个或多个行定位器,这些行定位器指向有该键值的数据行(如果索引不唯一,则可能是多行)。
非聚集索引可以在有聚集索引的表、堆集或索引视图上定义。在 Microsoft® SQL Server™ 2000 中,非聚集索引中的行定位器有两种形式:
如果表是堆集(没有聚集索引),行定位器就是指向行的指针。该指针用文件标识符 (ID)、页码和页上的行数生成。整个指针称为行 ID。
如果表没有聚集索引,或者索引在索引视图上,则行定位器就是行的聚集索引键。如果聚集索引不是唯一的索引,SQL Server 2000 将添加在内部生成的值以使重复的键唯一。用户看不到这个值,它用于使非聚集索引内的键唯一。SQL Server 通过使用聚集索引键搜索聚集索引来检索数据行,而聚集索引键存储在非聚集索引的叶行内。
由于非聚集索引将聚集索引键作为其行指针存储,因此使聚集索引键尽可能小很重要。如果表还有非聚集索引,请不要选择大的列作为聚集索引的键。
唯一索引:
唯一索引可以确保索引列不包含重复的值。在多列唯一索引的情况下,该索引可以确保索引列中每个值组合都是唯一的。
唯一索引既是索引也是约束。
复合索引:
索引项是多个的就叫组合索引,也叫复合索引。
复合索引使用时需要注意索引项的次序。
创建简单索引
CREATE INDEX au_id_ind
ON authors (au_id)
创建唯一聚集索引
CREATE UNIQUE CLUSTERED INDEX employeeID_ind
ON emp_pay (employeeID
创建唯一非聚集索引
CREATE [ UNIQUE ] NONCLUSTERED INDEX index_name
ON table/view ( column )
创建组合索引
CREATE INDEX emp_order_ind
ON order_emp (orderID, employeeID)
限制索引:
限制索引一般是没有经验的人常犯的错误之一,在SQL中有很多的陷阱都会史索引无法使用:
1:使用不等号(<>,!=);
2: 使用isnull,is not null;
3:使用函数;
4:比较不同的数据类型:
比如表中的字段的数据类型是account_number varchar2而且这个字段建立了索引,查询语句为:
select * from banks where account_number=990354,这样就会知晓全表扫描,oracle会
自动的把where子句变成to_number(account_number)=990354这样就限制了索引,所以要
使用select * from banks where account_number='990354';
注意事项
在创建非聚集索引之前,应先了解您的数据是如何被访问的。可考虑将非聚集索引用于:
包含大量非重复值的列,如姓氏和名字的组合(如果聚集索引用于其它列)。如果只有很少的非重复
值,如只有 1 和 0,则大多数查询将不使用索引,因为此时表扫描通常更有效。
不返回大型结果集的查询。
返回精确匹配的查询的搜索条件(WHERE 子句)中经常使用的列。
经常需要联接和分组的决策支持系统应用程序。应在联接和分组操作中使用的列上创建多个非聚集索
引,在任何外键列上创建一个聚集索引。
在特定的查询中覆盖一个表中的所有列。这将完全消除对表或聚集索引的访问。
注意事项
定义聚集索引键时使用的列越少越好,这一点很重要。如果定义了一个大型的聚集索引键,则同一个表上定义的任何非聚集索引都将增大许多,因为非聚集索引条目包含聚集键。当把 SQL 脚本保存到可用空间不足的磁盘上时,索引优化向导不返回错误。有关 Microsoft® SQL Server™ 2000 中如何实现非聚集索引的更多信息,请参见非聚集索引。
在分析过程中,索引优化向导会消耗相当多的 CPU 及内存资源。最好在生产服务器的测试版上执行优化,而不要在生产服务器上执行。此外,最好在另一台计算机上而非运行 SQL Server 的计算机上运行该向导。该向导不能用于在 SQL Server 6.5 版或更早版本的数据库中选择或创建索引及统计信息。
在创建聚集索引之前,应先了解您的数据是如何被访问的。可考虑将聚集索引用于:
包含大量非重复值的列。
使用下列运算符返回一个范围值的查询:BETWEEN、>、>=、< 和 <=。
被连续访问的列。
返回大型结果集的查询。
经常被使用联接或 GROUP BY 子句的查询访问的列;一般来说,这些是外键列。对 ORDER
BY 或 GROUP BY 子句中指定的列进行索引,可以使 SQL Server 不必对数据进行排序,
因为这些行已经排序。这样可以提高查询性能。
OLTP 类型的应用程序,这些程序要求进行非常快速的单行查找(一般通过主键)。应在主键上创建
聚集索引。
聚集索引不适用于:
频繁更改的列
这将导致整行移动(因为 SQL Server 必须按物理顺序保留行中的数据值)。这一点要特别注
意,因为在大数据量事务处理系统中数据是易失的。
宽键
来自聚集索引的键值由所有非聚集索引作为查找键使用,因此存储在每个非聚集索引的叶条目内
分享到:
相关推荐
### DB2索引分析器使用详解 在DB2数据库系统中,索引是优化查询性能的关键因素之一。正确地创建和维护索引可以显著提高数据检索的速度。DB2提供了多种工具来帮助用户管理和优化索引,其中“db2advis”索引分析器是...
"MySQL索引分析及优化" 索引是数据库中提高速度的一个关键因素。如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置。索引的使用可以大幅度地提高查询速度,减少数据库的...
### MySQL索引分析和优化 #### 一、索引的重要性及原理 索引在数据库管理中扮演着极其重要的角色,特别是在提高数据检索速度方面。**MySQL索引**本质上是用来加快数据检索过程的一种数据结构,类似于书籍中的目录...
《histcite:文献索引分析利器及使用指南》 histcite是一款专为科研工作者设计的文献索引分析软件,尤其适合硕士研究生、博士生以及大学教师等人群使用。这款工具的强大之处在于,它能帮助用户通过输入关键词快速...
### MySQL索引分析及优化 #### 一、引言 索引是数据库系统中用于加快数据检索速度的重要工具。在MySQL数据库中,索引通常采用B-树结构存储,能够显著提升查询性能。当没有索引时,进行查询操作可能需要全表扫描,...
**Lucene索引分析工具详解** Lucene是一个高性能、全文本搜索库,它为开发者提供了在应用程序中实现全文检索功能的基础。在这个场景中,我们关注的是一个专门针对Lucene.net的索引分析工具,该工具被称为"Lucene...
Oracle 索引分析与查询优化 Oracle 是一种关系型数据库,广泛应用于国内交通、电力、通信和金融等重要领域。 Oracle 在处理数据效率和数据安全上有非常大的提高,磁盘阵列技术(RAID)和集群技术(RAC)的运用也...
MySQL索引分析和优化是数据库管理中的重要环节,它直接影响到数据查询的速度和数据库的性能。索引可以被看作是数据库中的一种特殊文件,它按照特定的规则组织,允许数据库快速定位到所需的数据行。 首先,我们来看...
### MySQL索引分析和优化深度解析 #### 引言 MySQL数据库系统中,索引扮演着至关重要的角色,尤其在大数据量的环境下,其对查询性能的影响不可小觑。索引能够极大地加速数据检索速度,减少数据库服务器的负载,...
Sqlserver索引分析,Sqlserver索引缺失,Sqlserver索引建议
潘海霞在其文章《集群环境下分布式索引分析》中,专注于解决分布式存储系统中,特别是在应用非主键访问数据时所面临的性能问题。本文将详细阐述分布式索引的概念、关键技术、组织形式以及如何在集群环境下设计和测试...
Mysql索引分析文章
本篇文章将深入探讨Oracle中的B*Tree索引、反向索引、降序索引、位图索引和函数索引。 1. **B*Tree索引**: - B*Tree索引是Oracle中最常见的索引类型,其结构类似于二叉树,可以高效地处理高基数数据列,即具有...
4. **位图索引**:位图索引适合于低基数和分析性查询(OLAP),尤其是用于关联少量数据行的情况。它使用位图来表示数据行与索引项的关系,每个位代表一行。对于多列组合索引或选择性较低的列,位图索引能提供高效的...
8. **索引优化**:MySQL提供了`EXPLAIN`关键字,可以帮助分析查询执行计划,了解是否正确使用了索引。通过`EXPLAIN`,可以发现查询是否进行了全表扫描、是否使用了索引、索引的类型以及索引的覆盖程度等信息,从而...
优化索引策略包括选择合适的索引类型、合理安排索引列的顺序、监控和分析查询性能。使用EXPLAIN语句可以帮助分析查询计划,了解是否有效利用了索引。另外,定期重建索引可以整理碎片,保持索引的高效性。 总之,...
本文将深入探讨Oracle索引的使用、存储原理以及如何分析索引效率,特别是通过`clustering_factor`这个指标来评估索引的性能。 首先,让我们理解索引的工作原理。在Oracle中,索引是一种特殊的数据库对象,它为表的...