索引的概念
建立索引的目的:提高了数据库系统的性能,加快数据的查询速度与减少系统的响应时间。
索引是什么:数据库中的索引类似于一本书的目录,在一本书中通过目录可以快速找到你想要的信息,而不需要读完全书。
在数据库中,数据库程序使用索引可以快速查询到表中的数据,而不必扫描整个表。
书中的目录是一个字词以及各字词所在的页码列表,数据库中的索引是表中的值以及各值存储位置的列表。
索引的利弊:查询执行的大部分开销是I/O,使用索引提高性能的一个主要目标是避免全表扫描,因为全表扫描需要从磁盘上读取表的每一个数据页,如果有索引指向数据值,则查询只需要读少数次的磁盘就行啦。
所以合理的使用索引能加速数据的查询。但是索引并不总是提高系统的性能,带索引的表需要在数据库中占用更多的存储空间,同样用来新增修改删除数据的命令运行时间以及维护索引所需的处理时间会更长。
所以我们要合理使用索引,及时更新去除次优索引。
索引的分类
索引就类似于中文字典前面的目录,按照拼音或部首都可以很快的定位到所要查找的字。
唯一索引(UNIQUE):每一行的索引值都是唯一的(创建了唯一约束,系统将自动创建唯一索引)。
主键索引:当创建表时指定的主键列,会自动创建主键索引,并且拥有唯一的特性。
聚集索引(CLUSTERED):聚集索引就相当于使用字典的拼音查找,因为聚集索引存储记录是物理上连续存在的,即拼音 a 过了后面肯定是 b 一样。
非聚集索引(NONCLUSTERED):非聚集索引就相当于使用字典的部首查找,非聚集索引是逻辑上的连续,物理存储并不连续。
聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个。
哪些字段需要建索引
1、表的主键、外键必须有索引
2、数据量超过300的表应该有索引
3、经常与其他表进行连接的表,在连接字段上应该建立索引
4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引
5、在频繁进行排序或分组(即进行GROUP BY或ORDER BY操作)的字段,应该建立索引
6、索引应该建在选择性高的字段上
7、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引,尽可能的使用整数做为键值,因为整数的访问速度最快
8、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替
9、频繁进行数据操作的表,不要建立太多的索引
10、删除无用的索引,避免对执行计划造成负面影响
索引太多的坏处
1、存储空间会变大,每个索引都要空间存储
2、如果非聚集索引很多,一旦聚集索引改变,那么所有非聚集索引都会跟着变
3、过多索引会导致优化器优化过程需要评估的组合增多,增加查询耗时
4、每个索引都有统计信息,索引越多统计信息越多,增加查询耗时
5、更新开销,一旦一个数据改变,并且改变的列比较多,可能会引起好几个索引跟着改变,导致update,delete,insert变慢
SQL Server 中创建索引
最新推荐文章于 2022-09-23 15:27:49 发布