首页 > 编程知识 正文

数据库索引的优缺点,索引的好处和坏处

时间:2023-05-05 19:16:52 阅读:61986 作者:2716

为什么要编制索引? 这是因为编制索引将大大提高系统的性能。

第一,可以通过创建唯一性索引来确保数据库表中每行的数据的唯一性。

二是可以大大加快数据检索。 这也是创建索引的最主要原因。

第三,加快表与表之间的连接。 特别是在实现数据的参照完整性方面特别有意义。

第四,使用分组和排序子句进行数据搜索也可以大大减少查询中分组和排序所需的时间。

第五,通过使用索引,可以使用查询过程中优化的隐藏器来提高系统性能。

既然添加索引有很多优点,为什么不为表中的每列创建索引呢? 这个想法有合理性,但也有片面性。 索引有很多优点,但向表中的每一列添加索引是不明智的。 这是因为增加索引也有很多不利的方面。

第一,索引的创建和维护需要时间。 此时间随数据量的增加而增加。

第二,索引需要物理空间。 除数据表外,每个索引还需要一定的物理空间。 创建集群索引时,所需的空间会变大。

第三,添加、删除和修改表中的数据时,索引也会动态维护,从而降低数据的维护速度。

索引是在数据库表的某些列上创建的。 因此,在索引时,必须仔细考虑可以在哪个列上索引,而不能在哪个列上索引。 通常,必须在以下列中创建索引:

对于经常需要搜索的列,可以加快搜索速度;

作为主键的列强制该列的唯一性和组织表中数据的数组结构

连接中常用的列主要有外键,可以加快连接速度。

经常在需要根据范围搜索的列中创建索引。 因为索引已经排序,指定的范围是连续的。

在经常需要排序的列中创建索引。 因为索引已经排序,所以查询可以利用索引排序来减少查询的排序时间。

通过在WHERE子句中的列上创建索引来加快条件的确定。

同样,有些列不创建索引。 通常,这些不应该索引的列具有以下特征:

第一,不要在查询中很少使用或引用的列上创建索引。 这是因为这些列很少使用,因此如果有索引或没有索引,查询速度就不会加快。 相反,由于索引增加,系统维护速度降低,空间要求增加。

第二,对于数据值较少的列,也不应该增加索引。 这是因为这些列的值很少,就像人力资源表中的性别列一样。 在查询结果中,结果集中的数据行占表中数据行的很大比例。 也就是说,因为需要在表中搜索的数据行的比例很大。 增加索引不会显著提高搜索速度。

第三,不要向定义为text、image和bit数据类型的列添加索引。 这是因为这些列的数据量相当大或值很少。

第四,如果修改性能远远大于搜索性能,就不应该编制索引。 这是因为修正性能和检索性能矛盾。 增加索引会提高搜索性能,但会降低修改性能。 减少索引会提高修改性能,降低搜索性能。 因此,如果修改的性能远远大于搜索的性能,请不要索引。

编制索引的方法和索引的特点

如何创建索引

创建索引有直接创建和间接创建两种方法。 使用CREATE INDEX语句或使用索引向导间接创建索引。 例如,在表中定义主键约束和唯一键约束时,也会创建索引。 您可以使用这两种方法进行索引,但索引的具体内容不同。

使用CREATE INDEX语句或使用索引向导创建索引。 这是最基本的索引方法,您可以自定义和创建最灵活、最符合您需要的索引。 以这种方式创建索引时,可以使用许多选项优化索引,包括指定数据页的完整性、排序和组织统计信息。 使用此方法可以指定索引的类型、唯一性和复合性。 也就是说,可以对集群索引和非集群索引,或者对一列进行索引,也可以对两个或多个列进行索引。

也可以通过定义密钥约束或唯一性密钥约束间接创建索引。 主键约束是维护数据完整性的逻辑,它限制表中的记录具有相同的主键记录。 创建主键约束条件时,将自动创建唯一的集群索引。 虽然在逻辑上主键约束是重要的结构,但是在物理上与主键约束相对应的结构是唯一的集群索引。 也就是说,在物理实现中,没有主键约束,只有唯一的集群索引。 同样,创建唯一键约束时,也会创建索引。 此索引是唯一的非群集索引。 因此,在使用约束条件创建索引时,索引的类型和特征基本上是固定的,用户定制的空间很小。

在表中定义主键或唯一键约束时,如果使用CREATE INDEX语句创建的标准索引已经在表中,则主键约束或唯一键约束创建的索引将复盖先前创建的标准索引也就是说,主键约束或唯一键约束创建的索引优先于使用CREATE INDEX语句创建的索引。

索引的特征

索引有两个特征:唯一性索引和复合索引。

唯一性索引确保索引列中的所有数据都是唯一的,并且不包含冗馀数据。 如果表已经有主键或唯一键约束,则在创建或修改表时,SQL Server会自动创建唯一性索引。 但是,如果需要的话

保证唯一性,那么应该创建主键约束或者唯一性键约束,而不是创建一个唯一性索引。当创建唯一性索引 时,应该认真考虑这些规则:当在表中创建主键约束或者唯一性键约束时,SQL Server自动创建一个唯一性索引;如果表中已经包含有数据,那么当创建索引时,SQL Server检查表中已有数据的冗余性;每当使用插入语句插入数据或者使用修改语句修改数据时,SQL Server检查数据的冗余性:如果有冗余值,那么SQL Server取消该语句的执行,并且返回一个错误消息;确保表中的每一行数据都有一个唯一值,这样可以确保每一个实体都可以唯一确认;只能在可以保证实体 完整性的列上创建唯一性索引,例如,不能在人事表中的姓名列上创建唯一性索引,因为人们可以有相同的姓名。

复合索引就是一个索引创建在两个列或者多个列上。在搜索时,当两个或者多个列作为一个关键值时,最好在这些列上创建复合索引。当创建复合索引时,应该考虑 这些规则:最多可以把16个列合并成一个单独的复合索引,构成复合索引的列的总长度不能超过900字节,也就是说复合列的长度不能太长;在复合索引中,所 有的列必须来自同一个表中,不能跨表建立复合列;在复合索引中,列的排列顺序是非常重要的,因此要认真排列列的顺序,原则上,应该首先定义最唯一的列,例 如在(COL1,COL2)上的索引与在(COL2,COL1)上的索引是不相同的,因为两个索引的列的顺序不同;为了使查询优化器使用复合索引,查询语 句中的WHERE子句必须参考复合索引中第一个列;当表中有多个关键列时,复合索引是非常有用的;使用复合索引可以提高查询性能,减少在一个表中所创建的 索引数量。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。