数据库创建索引有什么优点和缺点

数据库中索引的优缺点为什么要创建索引呢?这是因为,创建索引可以大大提高系统的性能,优点:第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。 

也许会有人要问:增加索引有如此多的优点,为什么不对表中的每一个列创建一个索引呢?这种想法固然有其合理性,然而也有其片面性。虽然,索引有许多优点,但是,为表中的每一个列都增加索引,是非常不明智的。这是因为,增加索引也有许多不利的一个方面, 缺点:第一,创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。 

索引是建立在数据库表中的某些列的上面。因此,在创建索引的时候,应该仔细考虑在哪些列上可以创建索引,在哪些列上不能创建索引。一般来说,应该在这些列上创建索引,例如:在经常需要搜索的列上,可以加快搜索的速度;在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。 

同样,对于有些列不应该创建索引。一般来说,不应该创建索引的的这些列具有下列特点:第一,对于那些在查询中很少使用或者参考的列不应该创建索引。这是因为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。第二,对于那些只有很少数据值的列也不应该增加索引。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度。第三,对于那些定义为text, image和bit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少。第四,当修改性能远远大于检索性能时,不应该创建索引。这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因此,当修改性能远远大于检索性能时,不应该创建索引。 

原文地址:https://www.cnblogs.com/telwanggs/p/10792157.html

时间: 2024-10-12 08:30:26

数据库创建索引有什么优点和缺点的相关文章

数据库创建索引的原则

数据库建立索引的原则 铁律一:天下没有免费的午餐,使用索引是需要付出代价的 索引的优点有目共睹,但是,却很少有人关心过采用索引所需要付出的成本.若数据库管理员能够对索引所需要付出的代价有一个充分的认识,也就不会那么随意到处建立索引了.仔细数数,其实建立索引的代价还是蛮大的.如创建索引和维护索引都需要花费时间与精力.特别是在数据库设计的时候,数据库管理员为表中的哪些字段需要建立索引,要调研.要协调.如当建有索引的表中的纪录又增加.删除.修改操作时,数据库要对索引进行重新调整. 虽然这个工作数据库自

转载——数据库创建索引的一些原则

转载自:http://blog.csdn.net/tenfyguo/article/details/3974448 一,经常被用来过滤记录的字段. 1. primary key 字段, 系统自动创建主键的索引: 2. unique kye 字段,系统自动创建对应的索引; 3. foreign key 约束所定义的作为外键的字段; 4. 在查询中用来连接表的字段; 5. 经常用来作为排序(order by 的字段)基准的字段; 二. 索引会占用磁盘空间,创建不必要的索引只会形成浪费. 三. 索引的

数据库创建索引的优缺点

为什么要创建索引呢?这是因为,创建索引可以大大提高系统的性能,优点: 第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性. 第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因. 第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义. 第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间. 第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能. 也许会有人要问:增加索引有如此多的优点,为什么不对表中的每一个

数据库创建索引的利弊

索引就像是书的目录,是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度.索引中包含由表或视图中的一列或多列生成的键.这些键存储在一个结构(BTree)中,使SQL可以快速有效地查找与键值关联的行. 2. 为什么要建立索引,即索引的优点: ①  建立索引的列可以保证行的唯一性,生成唯一的rowId ②  建立索引可以有效缩短数据的检索时间 ③  建立索引可以加快表与表之间的连接 ④  为用来排序或者是分组的字段添加索引可以加快分组和排序顺序 3. 索引的缺点: ①  创建索引和维护索引

数据库lib7第2, 3题(创建索引和触发器)

2. 分别为上述建立的表格建立适当的索引,请描述建立索引的过程(可以截图或者写SQL).其中,要求对SPJ标中的SNo, PNo字段各建立一个索引,为(PNo, JNo)的组合建立一个索引.请问,SNo和PNo上的索引是聚集索引还是非聚集索引?为什么? 附上代码: 1 create index SNo_Index on SPJ(SNo) 2 create index PNo_Index on SPJ(PNo) 3 create clustered index SNo_PNo_Index on S

记录一次数据库某表未创建索引造成的问题

现象描述: 昨天鹰网监控告知廊坊某台物理机CPU使用率接近100%,查看得知每颗逻辑CPU的使用率都接近了100%,但该数据库机器是测试机器,按理说不会造成此问题.截图如下: 处理步骤: 1. 查看消耗大量CPU资源和I/O等待的PID 通过TOP命令即可查看 2. 通过PID查看正在执行的SQL SELECT sql_text FROM v$sqltext a WHERE (a.hash_value, a.address) IN (SELECT DECODE(sql_hash_value, 0

oracle数据库什么情况下创建索引比较好

索引就好象一本字典的目录.凭借字典的目录,我们可以非常迅速的找到我们所需要的条目.数据库也是如此.凭借Oracle数据库的索引,相关语句可以迅速的定位记录的位置,而不必去定位整个表. 虽 然说,在表中是否创建索引,不会影响到Oracle数据库的使用,也不会影响数据库语句的使用.这就好像即使字典没有目录的话,用户仍然可以使用它一 样.可是,若字典没有目录,那么可想而知,用户要查某个条目的话,其不得不翻遍整本字典.数据库也是如此.若没有建立相关索引的话,则数据库在查询记录的 时候,不得不去查询整个表

MySQL外键及级联删除 && 表的存储引擎与创建索引 && 删除数据库和表

Messages表: mysql>create table Messages( ->message_id int auto_increment primary key, ->user_name varchar(50) not null, ->author_id int not null, ->body text, ->forum_id int not null); Forums表: mysql>create table Forums( ->forum_id

数据库优化之创建索引

索引提供指针以指向存储在表中指定列的数据,然后根据指定的次序排列这些指针,在根据指针到达包含该值的行 什么是索引 数据库中的索引和数据的目录相似,利用目录快速查找所需的信息.在数据库中,索引是某个表中一列或者若干列值的集合,以及物流标识这些值的数据页的逻辑指针清单.是SQL Server编排数据的内部方法,通过索引,可快速查找数据,而无需扫描整个表 索引页是数据库中存储索引的数据页,存放数据行的关键字页以及该数据行的地址指针 索引分类 在SQL Server中,常见的索引有以下六类: 唯一索引: