数据库索引

来源:互联网 发布:苹果tv怎么设置网络 编辑:程序博客网 时间:2024/06/05 23:57

数据库索引:目的是加快查询的速度。

为表设置索引要付出代价的:一是增加了数据库的存储空间二是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)

索引的实现通常使用B树及其变种B+树

在经常查询的字段上建索引,如果表的列很少,不适合建索引。

根据数据库的功能,可以在数据库设计器中创建三种索引:唯一索引、主键索引和聚集索引

使用索引,在where之后加上索引,提高查询的速度。

创建一个表

CREATE TABLE mytable (
 id serial primary key,
 category_id int not null default 0,
 user_id int not null default 0,
 adddate int not null default 0
);

如果你在查询时常用类似以下的语句:SELECT * FROM mytable WHERE category_id=1; 
最直接的应对之道,是为category_id建立一个简单的索引:
CREATE INDEX mytable_categoryid ON mytable (category_id);

OK,搞定?先别高兴,如果你有不止一个选择条件呢?例如:
SELECT * FROM mytable WHERE category_id=1 AND user_id=2;
你的第一反应可能是,再给user_id建立一个索引。不好,这不是一个最佳的方法。你可以建立多重的索引。
CREATE INDEX mytable_categoryid_userid ON mytable (category_id,user_id);
注意到我在命名时的习惯了吗?我使用"表名_字段1名_字段2名"的方式。

数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询。


上图显示了一种索引方式。左边是数据库中的数据表,有col1和col2两个字段,一共有15条记录;右边是以col2列为索引列的B_TREE索引,每个节点包含索引的键值和对应数据表地址的指针,这样就可以都过B_TREE在O(logn)的时间复杂度内获取相应的数据,这样明显地加快了检索的速度。


1、B树(多路搜索树,不是二叉的)

B 通常认为是Balance的简称。这个数据结构一般用于数据库的索引,综合效率较高。

B树中每个节点包含了键值和键值对于的数据对象存放地址指针,所以成功搜索一个对象可以不用到达树的叶节点。

http://www.cnblogs.com/vincently/p/4526560.html中的动画把B树的插入过程解释的很清楚

2、B+树

mysql中主要是B+树索引。

http://www.cnblogs.com/vincently/p/4526560.html中的动画把B+树的插入过程解释的很清楚


MsSql使用的是B+Tree


部分转自:

http://www.cnblogs.com/harderman-mapleleaves/p/4528212.html

http://www.cnblogs.com/cy163/archive/2008/10/27/1320798.html

http://www.cnblogs.com/tommy-huang/p/4317305.html

http://www.cnblogs.com/vincently/p/4526560.html

原创粉丝点击