数据库
文章平均质量分 59
liuyiling_xm610
I want to be better than yesterday!
展开
-
数据库索引-本质
mysql的官方定义是:索引是提高查询速度的一种数据结构。由此可见,索引是一种数据结构。在数据库的增删改查中,查这个操作是最主要的功能之一。查询的主要方式有: 1.顺序查询,算法复杂度为O(n) 2.二分查找,要求数据有序,算法复杂度为O(log[2]N) 3.二叉查找树,要求数据存放在二叉查找树中如下所示: 有一张存原创 2016-05-26 07:35:21 · 484 阅读 · 0 评论 -
数据结构索引-InnoDB索引
我们知道,MyISAM索引文件和数据文件是分离的,索引文件仅仅保存了数据记录的地址。在InnoDB中,数据文件本身就是索引文件,表文件本身就是一个按照B+树组织的一个索引结构,叶节点data保存了完整的数据记录,这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。 上图是InnoDB数据文件(主索引)的示意图,叶节点包含了所有原创 2016-05-26 07:38:07 · 1479 阅读 · 0 评论 -
数据库索引-从计算机组成原理谈起
一般来说,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上。这样的话,索引查找过程中就要产生磁盘I/O消耗,相对于内存存取,I/O存取的消耗要高几个数量级,所以评价一个数据结构作为索引的优劣最重要的指标就是在查找过程中磁盘I/O操作次数的复杂度。换句话说,索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数。下面先介绍内存和磁盘存取原理,然后再结合这些原理分析B-原创 2016-05-26 07:39:32 · 374 阅读 · 0 评论 -
数据库索引-该不该设立主键
上文讨论了InnoDB的数据文件实现,使用聚集索引,数据文件即主键索引,非叶节点存放主键索引值,叶节点存放真实的数据节点没这就要求同一个叶子节点内的各条数据按主键存放。如图: 由于InnoDB的实现方式如此,所以我们尽量要使用一个与业务无关的自增主键。理由如下: 自增主键严格递增,mysql根据所插入的数据节点的主键值找到相应的叶节点(一般会放在原创 2016-05-26 07:41:32 · 1779 阅读 · 0 评论 -
数据库索引-建立索引的判断标准
索引虽然能加快查询速度,但是也带来了一定的缺点。因为索引虽然加快了查询速度,但是索引也是有代价的:索引本身会消耗内存空间,同时在对数据库进行增删改查的时候,也需要维护索引。因此索引并不是越多越好,需要因地制宜。有两种情况不建议建立索引:1.表的记录太少,一般以5000条为界限。对5000条记录以下的数据表建立索引还不如进行全表扫描。2.索引的选择性比较低:原创 2016-05-26 07:43:54 · 2689 阅读 · 0 评论 -
数据库索引-最左前缀原理及其优化
你一定听过最左前缀原理,要高效地使用msyql的索引进行查询,我们就必须掌握最左前缀原理,达到建立合适索引的目的这里我们使用mysql自带的employees数据库,请读者自行下载:这里先说一下联合索引的概念。在上文中,我们都是假设索引只引用了单个的列,实际上,MySQL中的索引可以以一定顺序引用多个列,这种索引叫做联合索引,一般的,一个联合索引是一个有序元组,其中各个元素原创 2016-05-26 07:46:09 · 1483 阅读 · 0 评论 -
数据库sharding-基本策略和原理
1.分库分表(sharding)的原因 在网站初期,为了节约资源,常常部署单点(单一服务器)mysql作为数据存储。随着网站业务量增大,机器的性能有限,单点mysql的I/O性能瓶颈马上达到高潮。 为了突破单节点I/O的性能,聪明的架构师开始引入多节点,这就是所谓分库。如果说单节点是单线程串行计算,那么多节点就是多线程并行计算。多节点的mysql服务借鉴了并行的思原创 2016-05-26 09:23:56 · 983 阅读 · 0 评论 -
数据库索引-数据结构
在上一篇文章中我们说了数据库索引的本质和使用二叉树实现的数据库索引,然而在实际的数据库系统中,基本没有使用二叉树实现索引,大多使用改进后的B+树作为索引。我们就来说一说其中的原因。 改进后的B+树基于B+树,B+树又基于B树,所以我们先从B树谈起 我们还是以Person(id,name,age)这个实例来讲诉B树。B树是这样的一个数据原创 2016-05-26 07:44:33 · 1725 阅读 · 0 评论