数据库索引
来源:互联网 发布:苹果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
- 数据库 索引&索引类型
- 数据库索引,联合索引
- 数据库索引
- 数据库索引
- 数据库索引
- 数据库索引
- 数据库索引
- 数据库索引
- 数据库索引
- 数据库索引
- 数据库索引
- 数据库索引
- 数据库索引
- 数据库 索引
- 数据库索引
- 数据库索引
- 数据库索引
- 数据库 索引
- Vue项目之Axios数据请求
- ALV输出的时候,输出字段内容前面的空格
- 使用sklearn做单机特征工程
- OpenCV
- 测试
- 数据库索引
- Xen 虚拟机重命名
- tcp三次握手与四次挥手
- 快速排序的递归实现算法
- 【LEET-CODE】53. Maximum Subarray
- Python -- 多进程实现
- hdpuj-盐水的故事
- Python 编程要点-- 变量和函数传参
- Redis快速入门