1.索引
索引是一个单独的、存储在磁盘上的数据库结构,它们包含着对数据表里所有记录的引用指针。使用索引便于快速找出在某个或多个列中有某一特定值的行,对相关列使用索引是降低查询操作时间的最佳途径。
如果没有索引,数据库需要遍历查询,当有了索引,SQL Server不需要任何扫描,可以直接找到目标位置。
索引的优点:
1.通过创建唯一索引,可以保证数据库表中每一行数据的唯一性。
2.可以大大加快数据的查询速度,这也是创建索引的主要原因。
3.实现数据的参照完整性,可以加速表和表之间的连接。
4.在使用分组和排序字句进行数据查询时,也可以显著减少查询中分组和排序的时间。
增加索引的缺点:
1.创建索引和维护索引需要耗费时间,并且随着数据量的增加所消耗的时间也会增加。
2.索引需要占用磁盘空间,除了数据表占用数据空间之外,每一个索引还要占用一定的物理空间,如果有大量的索引,索引文件可能比数据文件更快达到最大文件尺寸。
3.当对表中的数据进行增加、删除和修改的时候,索引也要动态地维护,这样就降低了数据的维护速度。
索引的分类
1.聚集索引
1.1每一个表只能有一个聚集索引,因为数据本身只能按一个顺序存储。
1.2表中的物理顺序和索引中行的物理顺序是相同,创建任何非聚集索引之前要首先创建聚集索引,因为非聚集索引改变了表中的物理顺序。
1.3关键值的唯一性使用UNIQUE关键字或者由内部的唯一识别符明确维护。
1.4在索引创建的过程中,SQL Server临时使用当前数据库的磁盘空间,所以要保证有足够的空间创建聚集索引。
2.非聚集索引
聚集索引具有完全独立于数据行的结构。可以对数据表创建多个非聚集索引。
查询具有以下特点时可以考虑使用非聚集索引:
(1)使用 JOIN 或 GROUP BY 子句。应为连接和分组操作中所涉及的列创建多个非聚集索引,为任何外键列创建一个聚集索引。
(2)包含大量唯一值的字段。
(3)不返回大型结果集的查询。创建筛选索引以覆盖从大型表中返回定义完善的行子集的查询。
(4)经常包含在查询的搜索条件(如返回完全匹配的WHERE子句)中的列。
2.创建索引
2.1使用对象资源管理器创建索引
目标数据表-》索引-》新建索引-》
唯一性:指索引键 列中的字段不能重复。
2.2T-SQL语言生成索引
create [UNIQUE] [CLUSTERED | NONCLUSTERED]
INDEX index_name ON {table | view} (column [ASC | DEC][,...n])
[ INCLUDE (column_name [,...n])]
[with
(
FILEFACTOR=filefactor --filefactor介于0%-100%
)
--create UNIQUE NONCLUSTERED
--INDEX 食品 ON animals(food desc)
3.删除索引
T-SQL语句删除索引
drop index '[table | view].index' [,...n]
drop index 'index_name' on '[table | view]'
DROP INDEX不能删除由CREATE TABLE 或者 ALTER TABLE命令创建的主键或者唯一性(UNIQUE)约束索引),也不能删除系统表中的索引。