索引

来源:互联网 发布:列举常用的查找算法 编辑:程序博客网 时间:2024/06/08 11:19
概念:1)数据库管理系统中,除了数据之外,数据库还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,我们可以通过这些数据结构来实现一些高级的查找算法,这种数据结构就是索引。2)索引是建立在数据库表的某些列上。实现:通常使用B树及其变种B+树来实现索引。优点:创建索引可以大大提高系统的性能。1)可以大大加快数据的查询速度。2)通过创建唯一性索引,可以保证表中每一行数据的唯一性3)在使用分组和排序子句查询数据时,可以显著减少查询中分组和排序的时间。4)可以加速表和表之间的连接。eg:在实现数据的参考完整性(使用外键)时,可加快连接的速度。5)通过使用索引,可以在查询的过程中,使用优化隐藏器,提高数据库系统的性能。代价:1)增加了数据库的存储空间。2)在修改、插入和删除数据时,索引也要动态维护,故在增删改数据时会花费较多的时间。分类:在创建索引时,必须要确定要创建的索引列和索引类型。1)普通索引:2)唯一索引:所有行的索引值均不相同。3)主键索引:1>定义主键时数据库会自动创建主键索引,主键索引是唯一索引的特定类型。2>主键索引要求主键中的每个值都唯一。4)聚集索引:1>在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。2>一个表只能包含一个聚集索引。3>如果某索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。4>与非聚集索引相比,聚集索引通常提供更快的数据访问速度。创建索引的场景:1)需要经常查询的列上。2)在作为主键的列上,强制该列的唯一性。3)连接表的列上(eg:外键),可以加快连接的速度。4)在经常需要排序(或根据范围进行查询)的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间。5)在经常使用在WHERE子句中的列上创建索引,加快条件的判断速度。不适合创建索引的场景:1)在查询中很少使用到的列不应该创建索引。2)取值很少的列不应该创建索引。eg:人员表中的性别列。说明:查询时需要在表中搜索的数据行占所有数据行的比例很大,故增加索引不能显著提高查询速度。3)text、image和bit数据类型的列不应该创建索引。说明:这些列的数据量要么相当大,要么取值很少。4)当修改性能远远大于检索性能时,不应该创建索引。说明:当增加索引时,会提高检索性能,但是会降低修改性能。

原创粉丝点击