数据库索引与数据库作业

什么是数据库索引?
数据库索引是对数据库表中一列或多列进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息。数据库索引就像书的目录,能加快数据库的查询速度。
索引分为聚簇索引(聚集索引)和非聚簇索引(非聚集索引)。聚簇索引是按照数据存放的物理位置为顺序的,聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索很快。
索引包含从表或视图中一个或多个列生成的键,以及映射到指定数据的存储位置的指针。通过创建良好的索引以支持查询,可以显著提高数据库查询和应用程序的性能。索引可以减少为返回结果集而必须读取的数据量。索引还可以强制表中的行具有唯一性,从而确保表的数据完整性。

优缺点?
建立索引的目的是加快对表中记录的查找或排序。为表设置索引是要付出代价的:一是增加了数据库的存储空间,二是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)。
优点:创建索引可以大大提高系统的性能。
1、通过创建唯一性索引,可以保证数据库表中每一条数据的唯一性。
2、可以大大加快数据库的检索速度,这也是创建数据库索引的主要原因。
3、可以加快表和表之间的连接,特别是在实现数据库的参照完整性方面。
4、在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间。
5、通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统性能。
缺点:
1、创建索引和维护索引要耗费时间,这种时间随着数据的增加而增加。
2、索引需要占物理空间,除了数据库表占数据空间外,每一个索引还要占一定的物理空间,如果要建立聚集索引,那么需要的空间会更大。
3、当对表中数据进行增加删除和修改时,索引也需要动态的维护,这样就降低了数据的维护速度。
聚集索引和非聚集索引
聚集索引是根据数据行的键值在表或视图中排序和存储这些数据行。索引定义中包含聚集索引列。每个表只能有一个聚集索引列。因为数据行本身只能按一个顺序排序。只有当表包行聚集索引时,表中的数据行才按排序顺序存储。
如果表具有聚集索引,则该表称为聚集表。如果表没有索引,则其数据存在一个成为堆的无序结构中。
非聚集索引具有独立于数据行的结构。非聚集索引包行非聚集索引键值,并且每个键值顶部都有指向包行该键值的数据行的指针。从非聚集索引中的索引行指向数据行的指针成为行定位器。行定位器的结构取决于数据页是存储在堆中还是聚集表中。对于堆,行定位器是指向行的指针。对于聚集表,行定位器是聚集索引键。

创建索引的注意事项
应该创建索引的这些列具有以下特点:
1、在经常需要搜索的列上。可以加快搜索的速度。
2、在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;
3、在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的。
4、在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的的排序,加快排序查询的时间
5、在经常使用WHERE子句的适合
不应该创建索引的列:
1、对于那些在查询中很少使用或者参考的列不应该创建索引。既然这些这些列很少使用到,因此有索引或无索引并不能提高查询速度。相反,由于增加了索引,反而降低了系统维护速度还增大了空间需求。
2、对于那些只有很少数据值的列也不应该增加索引。
3、对于那些定义为text,image,和bit数据类型的不应该增加索引。因为这种列的数据量要么相当大,要么取值很少,不利于使用索引 。
4、当修改性能远远大于检索性能时,不应该创建索引。这是因为,修改性能和检索性能是互相矛盾的,当增加索引时,会提高检索性能,但是会降低修改性能。

优化数据库索引
1、重新组织和重新生成索引
2、无论何时对基础数据执行插入、更新或删除造作操作,SQLServer数据库引擎都会自动维护索引。随着时间的推移,这些修改可能会导致索引中的信息分散在数据库中(含有碎片)。当索引包含的页中逻辑排序与数据文件中的物理排序不匹配时,就存在碎片。碎片非常多的可能会降低查询性能,导致应用程序响应缓慢。
可以用 dbcc showconting(表名) 来查看碎片信息。

减少索引碎片
1、删除并重新创建聚集索引。
2、重新创建聚集索引将对数据进行重新分布,从而使数据页填满。填充度可以使用 CREATE INDEX 中的 FILLFACTORY选项进行配置。这种方法的缺点是索引在删除和重新创建期间为脱机状态,并且操作属原子级。如果中断索引创建,则不能重新创建索引。
3、使用DBCC INDEXDEFRAG按逻辑顺序重新排序索引的叶级叶。由于这是联机操作,因此在语句运行时仍可以使用索引。中断此操作时不会丢失已经完成的任务。此方法的缺点是在重新组织数据方面不如索引重新生成的操作的效果好,而且不更新统计信息。

创建数据库作业的前提
在创建作业前,需要SQLServer的代理服务(SQLServer Agent 服务)正在运行。
SQLServer 代理可以通过SQLServer Management Studio快速停止和启动。重新启动SQLServer Agent服务。

代理作业流程
创建名称;添加步骤;计划时间; 执行。

你可能感兴趣的:(数据库,SQLServer)