大型数据库——索引
Posted 小姚同学要继续加油呀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大型数据库——索引相关的知识,希望对你有一定的参考价值。
什么叫索引
据库中的索引是某个表中一列或者若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
数据库中的索引与书籍中的索引类似,在一本书中,利用索引可以快速查找所需信息,无须阅读整本书。在数据库中,索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需数据。书中的索引是一个词语列表,其中注明了包含各个词的页码。
索引的作用
- 通过创建唯一索引,可以保证数据记录的唯一性。
- 可以大大加快数据检索速度。
- 可以加速表与表之间的连接,这一点在实现数据的参照完整性方面有特别的意义。
- 在使用
ORDER BY
和GROUP BY
子句中进行检索数据时,可以显著减少查询中分组和排序的时间。 - 使用索引可以在检索数据的过程中使用查询优化器,提高系统性能。
索引类型
聚集索引和非聚集索引
聚集索引:行的物理存储顺序与索引顺序完全相同,每个表只允许建立一个聚集索引。默认情况下,SQL Server为主键约束建立的索引为聚集索引。
非聚集索引:不改变表中数据行的物理存储顺序。默认情况下, SQL Server为UNIQUE
约束所建立的索引为非聚集索引。
建立聚集索引随时要改变表中数据行的物理顺序,所以应在其他非聚集索引建立之前建立聚集索引,以免引起SQL Server重新构造非聚集索引。
主键索引和非主键索引
主键索引:主键创建会自动创建聚集索引。频繁更改的属性列上不适宜创建主键聚集索引,因为SQL Server要求必须按照这些属性列的值重新安排记录的物理顺序,这将导致记录的物理移动。
非主键索引:在非主键的属性列上创建的索引,这些索引一般都是非聚集索引。
唯一索引和非唯一索引
唯一索引:索引列中不包含重复值。只有当唯一性是数据本身特征时,指定唯一索引才有意义。使用唯一索引不能完全等同于使用主键(唯一索引允许一个空值)。如果某列包含多行NULL值,则不能在该列上创建唯一索引。
数据表创建唯一索引后,SQL Server将禁止INSERT
语句和UPDATE
语句向表中添加重复的键值行。
非唯一索引:非设置PRIMARY KEY
约束或UNIQUE
约束时的索引。
单列索引和复合索引
单列索引:指对表中单个列建立索引。多数情况下,单列索引是创建索引首选考虑的索引,因为单列索引代价相对较小,而对数据库查询效能提高很大。
复合索引:一个索引中包含了一个以上的列的索引。复合索引最多可以有16个列复合到一个索引中,并且这些列必须位于同一个表中,在使用复合索引检索时,把被索引的列作为一个单位。
索引的创建与删除
创建索引
1.创建索引的方法
(1)利用企业管理器或对象资源管理器直接创建索引。
(2)利用Transact-SQL
语句中的CREATE INDEX
命令创建索引。
语法格式:
CREATE [UNIQUE] [CLUSTERED| NONCLUSTERED ]
INDEX 索引名
ON 数据表名|视图名( 字段名 [ ASC | DESC ] [ ,...n ] )
[WITH
[PAD_INDEX]
[[,]FILLFACTOR=填充因子]
[[,]IGNORE_DUP_KEY]
[[,]DROP_EXISTING]
[[,]STATISTICS_NORECOMPUTE]
[[,]SORT_IN_TEMPDB]]
[ ON 文件组名]
参数说明:
(1)UNIQUE:用于指定为表或视图创建唯一索引,即不允许存在索引值相同的两行。
(2)CLUSTERED:用于指定创建的索引为聚集索引。
(3)NONCLUSTERED:用于指定创建的索引为非聚集索引。
(4)ASC|DESC:用于指定具体某个索引列的升序或降序排序方向。
(5)PAD_INDEX:用于指定索引中间级中每个页(节点)上保持开放的空间。必须和填充因子同时使用。
(6)FILLFACTOR =填充因子:用于指定在创建索引时,每个索引页的数据占索引页大小的百分比,fillfactor的值为1到100。
(7)IGNORE_DUP_KEY:用于控制当往包含于一个唯一聚集(注:有误,非聚集索引也可使用此选项)索引中的列中插入重复数据时SQL Server所作的反应。当使用该选项,表示当插入或更新记录时,忽略重复键值。
(8)DROP_EXISTING:用于指定应删除并重新创建已命名的先前存在的聚集索引或者非聚集索引。
(9)STATISTICS_NORECOMPUTE:用于指定过期的索引统计不会自动重新计算。
(10)SORT_IN_TEMPDB:用于指定创建索引时的中间排序结果将存储在 tempdb 数据库中。
删除索引
1.删除索引的方法
SQL Server 2000删除索引的主要方法有:利用企业管理器删除索引;利用SQL语句中的DROP INDEX命令删除索引。
(1)利用企业管理器删除索引
(2)利用SQL中的DROP INDEX命令删除索引
其语法形式如下:
DROP INDEX 表名.索引名[,…n]
以上是关于大型数据库——索引的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用sort.list函数对向量数据进行排序(默认升序排序)返回排序后的对应索引值
数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。
你可能不知道SQL Server索引列的升序和降序带来的性能问题
pandas读取csv数据index_col参数指定作为行索引的数据列索引列表形成复合(多层)行索引sort_index函数基于多层行索引对dataframe数据排序(默认升序排序)