数据库之索引

今天想到数据库的优化,第一项就想到了索引,所以想重新认识一下索引。首先百度百科了一下,定义还是首要看的嘛!

定义:索引是一个单独的、物理的数据结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。

我去!!!这定义谁下的,读起来拗口不说,还死难理解对吧?还是看看它可以干什么吧!

使用索引可以快速访问数据库表中的特定信息。索引是对数据库表中一列或多列值进行排序的一种结构;例如EMPLOYEE表中的姓名(NAME)列,如果要按姓查找特定职员,与必须搜索表中的所有行相比,索引会帮助你更快的获得该信息;这样看来,数据库使用索引的方式与你使用书籍中的索引的方式很相似。这样的一说,很容易理解了不是?
再比如这样的一个查询:select * from table1 where
id=10000.如果没有索引,必须遍历整个表,直到ID等于10000的这一行被找到为止;有了索引之后(必须是ID这一列上建立的索引),即可在索引中查找。由于索引值经过某种算法优化过的,因而查找次数要少的多的多;可见索引是用来定位的;

还有数据库索引分三种:唯一索引、主键索引和聚集索引。

这样看来,数据库使用索引带来如下好处:

1、大大加快数据的检索速度,

2、创建唯一性索引(唯一索引是不允许其中任何两行具有相同索引值的索引。),保证数据库表中每一行数据的唯一性;(个人认为使用唯一索引不太契合实际)

3、加快表与表之间的连接;

4、在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间。

凡是有利必有弊,YOU KNOW THAT!

使用索引的缺点:

1、索引需要占物理空间。

2、当最表中的数据进行增加、删除和修改的时候,索引页要动态的维护,降低了数据的维护速度;

以上就是数据库索引的一个大致介绍。

下面了解一下聚集索引(一个表只能包含一个聚集索引):
聚集索引是索引的一种,该索引中键值的逻辑顺序决定了表中相应行的物理顺序;聚集索引对于那些经常要搜索的范围值的列特别有效。

适用情况如下:

1、含有大量非重复值的列

2、适用BETWEEN,>,>=,<,<=返回一个范围值的列

3、被连续访问的列

4、返回大型结果集的查询

5、经常被使用连接或Group by子句的查询访问的列

聚集索引能提高多行检索的速度,二非聚集索引对于单行的检索速度很快;

综上了哦!!!

建立索引的目的是加快对表中记录的查找或排序。但是为表设置索引要付出代价的:一是增加了数据库的存储空间,而是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)。说白了,数据库索引就是为了提高表的搜索效率而对某些字段中的值建立的目录;

优缺点详细总结如下:

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

因为,增加索引也有许多不利的方面。第一,创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

以上大部分知识总结都来自百度百科,本人只是按自己的思绪整理了一下!

都是一些理论知识,具体实践还是要自己去摸索学习的!

数据库之索引,布布扣,bubuko.com

时间: 2024-12-16 09:12:29

数据库之索引的相关文章

数据库中索引的优缺点

转自:http://blog.sina.com.cn/s/blog_5a8b8eb80100sg84.html 一.索引的概念 索引就是加快检索表中数据的方法.数据库的索引类似于书籍的索引.在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息.在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库. 二.索引的特点 1.索引可以加快数据库的检索速度 2.索引降低了数据库插入.修改.删除等维护任务的速度 3.索引创建在表上,不能创建在视图上 4.索引既可以直接创建,

sql server数据库中索引失效的问题讨论

有关于数据库中索引失效的问题,网上也有相关的讨论.不过他们是针对oracle数据库进行讨论的.那么在sql server数据库中索引什么时候 会失效呢.总结了一下,不过我没有经过测试.没测试就没有发言权,这里仅供自己参考. 首先,所谓失效.并不真的就是这个索引被删除了.而是在这些情况下,DBMS不会检索索引列表了.执行速度和没有这个索引时的速度一样. 但是再执行另外的一条语句.同样索引可以正常起作用.所以索引的失效是针对某条sql语句的,而不是针对索引本身的.那么在哪些情况下, 确切的说是在哪类

数据库Hash索引

Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-Tree 索引.虽然 Hash 索引效率高,但是 Hash 索引本身由于其特殊性也带来了很多限制和弊端,主要有以下这些. (1)Hash 索引仅仅能满足等值查询(例如:=,in 等),不能使用范围查询.由于 Hash 索引比较的是进行 Hash 运算之后的 Hash 值,所以它只能用于等值的过滤,不能

数据库创建索引的原则

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

为MySQL数据库添加索引

为mysql数据库建立索引 转载:http://www.cnblogs.com/cy163/archive/2008/10/27/1320798.html 最普通的情况,是为出现在where子句的字段建一个索引.为方便讲述,我们先建立一个如下的表. Code代码如下: CREATE TABLE mytable ( id serial primary key, category_id int not null default 0, user_id int not null default 0, a

Solr的配置及从数据库建立索引

1 . Solr 简介 Solr 是一个基于 Lucene 的 Java 搜索引擎服务器. Solr 提供了层面搜索.命中醒目显示并且支持多种输出格式(包括 XML/XSLT 和 JSON 格式).它易于安装和配置,而且附带了一个基于 HTTP 的管理界面. Solr 已经在众多大型的网站中使用,较为成熟和稳定. Solr 包装并扩展了 Lucene ,所以 Solr 的基本上沿用了 Lucene 的相关术语.更重要的是, Solr 创建的索引与 Lucene 搜索引擎库完全兼容.通过对 Sol

mysql数据库的索引

day04  MySQL数据库的索引 一.索引概述: 索引是由一张表中的某个列或多列组成,而创建索引的目的是为了更优化管理我们的数据库表,提升我们查询使用数据库表的速度. 二.索引 1.索引的分类: 索引分为多种索引,具体的索引在下图中可以看见 普通索引:不应用任何限制条件的索引,可以在任何类型的数据库中创建. 唯一索引:使用unique参数可以设置唯一索引.必须是唯一的,主键是一种特殊的唯一索引. 全文索引:使用fulltext参数可以设置索引的全文索引,只能够创建在char.varchar或

记录数据库中索引失效的问题

昨天碰到一个很有意思的问题,一个sql 语句,加上 SoftUseLine like '%OQC%' 之后,速度就特别慢.去掉该条件之后,速度就快起来了. 查看sql 语句的执行情况,发现加上那个查询条件之后,SoftWareDetailInfo表的逻辑读取变成了1300374 次, 可是这个查询字段明明已经加上Index_SoftWareDetail索引了,怎么会逻辑读取还这么大呢.查看sql profile 的详细信息,发现sql 语句,没有走那个索引. 于是,加上WITH(INDEX(In

通过DBCC整理Sqlserver数据库表索引碎片

昨天检查了一张效率极慢的表,两年多没有维护,逻辑扫描碎片高达99.81%,于是开始对这个表进行重点跟踪和记录日志.今天用DBCC SHOWCONTIG WITH TABLERESULTS 命令检查了一下所有表的概况,然后参照着MSDN对字段的说明,发现问题比较严重.ScanDensity(这是"最佳计数"与"实际计数"的比率.如果所有内容都是连续的,则该值为 100:如果该值小于 100,则存在一些碎片)有的甚至在16.6666666666667,其他扫描密度等指标