说明:红色字体表示要特别注意点
索引是在数据库表或者视图上创建的对象,目的是为了加快对表或视图的查询的速度。
按照存储方式分为:聚集与非聚集索引
按照维护与管理索引角度分为:唯一索引、复合索引和系统自动创建的索引。
索引的结构是由:根节点--->非叶节点--->非叶节点--->叶节点
1、聚集索引:表中存储的数据按照索引的顺序存储,检索效率比普通索引高,但对数据新增/修改/删除的影响比较大。逻辑顺序决定了表中相应行的物理顺序。
特点:
(1) 一个表可以最多可以创建249个索引
(2) 先建聚集索引才能创建非聚集索引
(3) 非聚集索引数据与索引不同序
(4) 数据与索引在不同位置
(5) 索引在叶节点上存储,在叶节点上有一个"指针"直接指向要查询的数据区域
(6) 数据不会根据索引键的顺序重新排列数据
(7)如果在该字段上进行范围查询,或者该表很少做增删改
创建聚集索引的语法:
create NONCLUSTERED INDEX idximpID ON EMP(empID)
2、非聚集索引:不影响表中的数据存储顺序,检索效率比聚集索引低,对数据新增/修改/删除的影响很少
。是通过二叉树的数据结构来描述的,逻辑顺序,特点:
(1) 无索引,数据无序
(2) 有索引,数据与索引同序
(3) 数据会根据索引键的顺序重新排列数据
(4) 一个表只能有一个索引
(5) 叶节点的指针指向的数据也在同一位置存储
语法:
create CLUSTERED INDEX idxempID on emp(empID)
3、惟一索引:惟一索引可以确保索引列不包含重复的值.
可以用多个列,但是索引可以确保索引列中每个值组合都是唯一的
姓 名
李 二
张 三
王 五
语法: create unique index idxempid on emp(姓,名)
4、复合索引:如果在两上以上的列上创建一个索引,则称为复合索引。
那么,不可能有两行的姓和名是重复的
语法:
create index indxfullname on addressbook(firstname,lastname)
注意:如果把复合的聚集索引字段分开查询。
带着这个问题,我们来看一下以下的查询速度(结果集都是25万条数据):(日期列fariqi首先排在复合聚集索引的起始列,用户名neibuyonghu排在后列):
(1)select gid,fariqi,neibuyonghu,title from Tgongwen where fariqi>''2004-5-5''
查询速度:2513毫秒
(2)select gid,fariqi,neibuyonghu,title from Tgongwen where fariqi>''2004-5-5'' and neibuyonghu=''办公室''
查询速度:2516毫秒
(3)select gid,fariqi,neibuyonghu,title from Tgongwen where neibuyonghu=''办公室''
查询速度:60280毫秒
从以上试验中,我们可以看到如果仅用聚集索引的起始列作为查询条件和同时用到复合聚集索引的全部列的查询速度是几乎一样的,甚至比用上全部的复合索引列还要略快(在查询结果集数目一样的情况下);而如果仅用复合聚集索引的非起始列作为查询条件的话,这个索引是不起任何作用的。当然,语句1、2的查询速度一样是因为查询的条目数一样,如果复合索引的所有列都用上,而且查询结果少的话,这样就会形成“索引覆盖”,因而性能可以达到最优。同时,请记住:无论您是否经常使用聚合索引的其他列,但其前导列一定要是使用最频繁的列。
5、系统自建的索引:在使用T_sql语句创建表的时候使用PRIMARY KEY或UNIQUE约束时,会在表上自动创建一个惟一索引
自动创建的索引是无法删除的
语法:
create table ABc
( empID int primary key,
firstname varchar(50)UNIQUE,
lastname varchar(50)UNIQUE,
)
这样的结果就出来了三个索引,但只有一个聚集索引哦
6、创建索引的方法:
1、企业管理器中
(1)右击某个表,所有任务---管理索引,打开管理索引,单击“新建”就可以创建索引
(2)在设计表中进行设计表,管理索引/键
(3)在关系图中,添加表后右击关系图中的某个表,就有“索引/键”
(4)通过向导,数据库---创建索引向导
(5)通过T-SQL语句
2、能过“索引优化向导”来优化索引的向导,通过它可以决定选择哪些列做为索引列
二、何时使用聚集索引或非聚集索引
下面的表总结了何时使用聚集索引或非聚集索引(很重要):
动作描述 | 使用聚集索引 | 使用非聚集索引 |
列经常被分组排序 | 应 | 应 |
返回某范围内的数据 | 应 | 不应 |
一个或极少不同值 | 不应 | 不应 |
小数目的不同值 | 应 | 不应 |
大数目的不同值 | 不应 | 应 |
频繁更新的列 | 不应 | 应 |
外键列 | 应 | 应 |
主键列 | 应 | 应 |
频繁修改索引列 | 不应 | 应 |
相关推荐
### 索引介绍:聚集索引与非聚集索引 #### 一、索引的基本概念 在数据库中,索引是一种特殊的文件结构,它的主要目的是为了提高数据检索的速度。索引通过创建一种数据结构(例如B树)来实现这一点,这种结构允许...
### 聚焦索引与非聚焦索引的深度解析 #### 一、索引的基础概念及作用 索引在数据库管理系统中扮演着至关重要的角色,它能够显著提高查询效率,减少系统的响应时间。简单来说,索引就像是图书的目录,帮助用户更快...
一、 创建主键(主键=主键索引=聚集索引) 主键是什么? 答:拿主键可以唯一确定一条数据,它和物理存储排序一致,不能为空,一个表只能有一个。 原本没有创建的主键的表在磁盘上存储为: Id=0;username=username0;sex...
通过将非键列添加到非聚集索引的叶级别,可以创建覆盖更多查询的非聚集索引。 重要概念: * 覆盖查询:当索引包含查询引用的所有列时,它通常称为“覆盖查询”。 * 索引覆盖:如果返回的数据列就包含于索引的键值...
相反,非聚集索引则独立于数据行,包含了索引键值和指向数据行的指针,允许一张表有多个非聚集索引。 创建索引的方式多样,可以直接通过SQL Server Management Studio,也可以通过编写SQL语句如`CREATE INDEX`来...
根据索引的组织方式和存储结构,索引可以分为聚集索引、非聚集索引、唯一索引和复合索引等。 * 聚集索引:将表中的记录在物理数据页中的位置按索引字段值重新排序,再将重排后的结果写回到磁盘上。每个表只能有一个...
4. 聚集索引与非聚集索引:聚集索引中,索引项的值就是数据行的位置,而非聚集索引则有单独的索引页和数据页,需要回表操作。 四、查询优化 1. 使用WHERE子句:避免全表扫描,合理使用索引字段进行筛选。 2. 避免...
### 深入浅出理解索引结构 在数据库领域,索引是提高查询效率的重要手段之一。本文将深入探讨索引的...无论是聚集索引还是非聚集索引,都有其适用场景,合理地创建和优化索引能够显著改善系统的响应时间和整体性能。
4. 聚集索引与非聚集索引:聚集索引的叶子节点直接包含行数据,而非聚集索引的叶子节点包含指向数据行的指针。InnoDB的主键索引是聚集索引,其他索引是非聚集索引。 5. 复合索引:当查询涉及多个列时,创建复合索引...
- **非唯一非聚集索引**: ```sql CREATE INDEX index_name ON table_name (column_name); ``` - **唯一非聚集索引**: ```sql CREATE UNIQUE INDEX index_name ON table_name (column_name); ``` - **唯一...
2. 非聚集索引:一个表可以有多个非聚集索引,索引键值和数据行之间通过书签(bookmark)关联。查询非聚集索引时,需要通过书签查找实际的数据行。 三、索引的选择与创建 创建索引需考虑以下因素: - 查询模式:...
非聚集索引不改变表中记录的物理顺序,而是在内存中创建一个独立的结构,其中包含索引键值和指向实际数据行的指针。一个表可以有多个非聚集索引,它们不会影响数据的物理存储方式。非聚集索引适用于需要快速查找单个...
创建索引的基本语法是`CREATE INDEX`,可选择是否创建唯一索引(UNIQUE),以及是聚集索引(CLUSTERED)还是非聚集索引(NON-CLUSTERED)。对于复合索引,应根据查询条件中字段的使用频率来排列字段顺序,以充分利用...
4. 非聚集索引:非聚集索引不决定数据的物理顺序,它包含指向数据行的指针。非聚集索引可以有多个,并且通常用于大型表。 5. 全文索引:全文索引主要用于文本搜索,它通过建立倒排索引来支持模糊匹配和短语搜索。 ...
4. 聚集索引与非聚集索引:聚集索引的叶子节点直接包含行数据,而非聚集索引的叶子节点包含指向实际数据行的指针。一张表只能有一个聚集索引,但可以有多个非聚集索引。 5. 复合索引:当需要基于多列进行排序或过滤...
通过对聚集索引与非聚集索引的选择、索引列的排序方式、填充因子的设定以及避免不当的索引设计等方面进行详细的讲解,为读者提供一套实用的索引设计指南,从而帮助提升系统的整体性能。 #### 关键词 - 索引 - 聚集...
如果表已有一个聚集索引,那么创建主键约束时,系统会创建一个唯一的非聚集索引。唯一约束虽然也保证了值的唯一性,但它允许空值,并且可能与非聚集索引关联。 4. **约束与索引的联系与作用**: - 当在表中创建...
2. **非聚集索引**:非聚集索引(也称为辅助索引或二级索引)的索引键值独立于数据存储,每个索引条目包含键值和对应数据行的指针。非聚集索引的叶子节点通常存储了键值和主键值,而非完整数据行。 再者,从逻辑...
- 非聚集索引(Secondary Index)的叶子节点存储的是主键值,通过主键值再找到对应的数据行。 5. 复合索引: - 复合索引由多个列组成,按照列的顺序决定其效率。 - 通常应根据查询条件的频率和数据分布来选择...
非聚集索引又分为主键索引、唯一性索引和普通索引。按照索引包含的字段数可分为单个索引和复合索引。 索引的优点如下: (1)唯一性索引,可以保证某列数据不重复,可以提高查询效率; (2)将建立索引的数据列为...