1、B+树基本概念

  B+树的语言定义比较复杂,简单的说是为磁盘存取设计的平衡二叉树

  网上经典图,黄色p1 p2 p3代表指针,蓝色的代表磁盘,里面包含数据项,第一层17,35,p1就代表小于17的,p2就代表17-35之间的,p3就代表大于35的,可是需要注意的是,第三层才是真实的数据,17、35都不是真实数据,只是用来划分数据的!

2、为什么使用B+树

  B+树有什么好处我们非要使用它呢?那就先要来看看mysql的索引

  2.1mysql索引

    试想一下在mysql中有200万条数据,在没有建立索引的情况下,会全部进行扫描读取,这个时间消耗是非常恐怖的,而对于大型一点的网站来说,达到这个数据量很容易,不可能这样去设计

    在我们创建数据库表的时候,大家都知道一个东西叫做主键,一般来讲数据库会自动在主键上创建索引,这叫做主键索引,来看看索引的分类吧

    a.主键索引:int优于varchar

    b.普通索引(INDEX):最基本的索引,没有限制,加速查找

    c.唯一索引(UNUQUE):听名字就知道,要求所有类的值是唯一的,但是允许有空值

    d.组合索引:

 CREATE INDEX name_age_address_Index ON `student`(`name`, `age`, `address`);

    在这里实际上包含三个索引,说到组合索引,一定要讲最左前缀原则


    最左前缀原则:

      我们现在创建了索引x,y,z,Index:(x,y,z),只会走x,xy,xyz的查询,例如:

 select * from table where x='1'
select * from table where x='1' and b='1'
select * from table where x='1' and b='1' and c='1'

      如果是x,z,就只会走x,注意一种特殊情况,select * from table where x='1' and y>'1' and z='1',这里只会走xy,因为在经历xy的筛选后,z不能保证是有序的,可索引是有序的,因此不会走z


    e.全文索引(FULLTEXT):用于搜索内容很长的文章之类的很好用,如果创建普通的索引,在遇到 like='%xxx%'这种情况索引会失效

 ALTER TABLE tablename ADD FULLTEXT(col1, col2)
SLECT * FROM tablename WHERE MATCH(col1, col2) AGAINST(‘x′, ‘y′, ‘z′)

    这样就可以将col1和col2里面包含x,y,z的记录全部取出来了

    

    索引的删除:DORP INDEX IndexName ON `TableName`

  

    索引的优缺点:

      1、在数据量特别庞大的时候,建立索引有助于我们提高查询效率

      2、在操作表的时候,维护索引会增加额外开销

      3、不泛滥使用索引,创建多了索引文件会膨胀很快

  2.2B+树的优点

    了解上面的模型后,试想一下,200W条数据,假如没有建立索引,会全部进行扫描,B+树仅仅用三层结构可以表示上百万的数据,只需要三次I/O!这提升是真的巨大啊!

    因为B+树是平衡二叉树,在不断的增加数据的时候,为了保持平衡可能需要做大量的拆分操作,因此提供了旋转的功能,不知道旋转建议去补一下树的基础知识

    B+树插入动画(来自https://www.cnblogs.com/vincently/p/4526560.html)

3、索引优化

  1、最佳左前缀原则

  2、不要在索引的列上做操作

  3、like会使索引失效变成全表扫描

  4、字符串不加单引号会导致索引失败

  5、减少使用select *

  参照这里,写的很好   https://www.cnblogs.com/zhaobingqing/p/7071331.html

总结:

  sql语句怎么用,没有规定必须怎么查,对于数据量小,有时候不需要新建立索引,根据一定的实际情况来考虑

    

mysql索引 b+树的更多相关文章

  1. MySQL索引-B+树(看完你就明白了)

    索引是一种数据结构,用于帮助我们在大量数据中快速定位到我们想要查找的数据.索引最形象的比喻就是图书的目录了.注意这里的大量,数据量大了索引才显得有意义,如果我想要在 [1,2,3,4] 中找到 4 这 ...

  2. 好文 | MySQL 索引B+树原理,以及建索引的几大原则

    Java技术栈 www.javastack.cn 优秀的Java技术公众号 来源:小宝鸽 blog.csdn.net/u013142781/article/details/51706790 MySQL ...

  3. CodingLabs - MySQL索引背后的数据结构及算法原理

    原文:CodingLabs - MySQL索引背后的数据结构及算法原理 首页 | 标签 | 关于我 | +订阅 | 微博 MySQL索引背后的数据结构及算法原理 作者 张洋 | 发布于 2011-10 ...

  4. B+树|MYSQL索引使用原则

    MySQL一直了解得都不多,之前写sql准备提交生产环境之前的时候,老员工帮我检查了下sql,让修改了一下存储引擎,当时我使用的是Myisam,后面改成InnoDB了.为什么要改成这样,之前都没有听过 ...

  5. MySQL索引之B+树

    MySQL索引大都存储在B+树中,除此还有R树和hash索引.B+树的基础还是B树. B树由2部分组成,节点和索引.下面将构建一个B树,每个节点存2个数据,每个节点有前,中,后三个索引.插入数字的顺序 ...

  6. MySQL的B树索引与索引优化

    MySQL的MyISAM.InnoDB引擎默认均使用B+树索引(查询时都显示为"BTREE"),本文讨论两个问题: 为什么MySQL等主流数据库选择B+树的索引结构? 如何基于索引 ...

  7. SQL优化 MySQL版 - B树索引详讲

    SQL优化 MySQL版  - -B树索引详讲 作者:Stanley 罗昊 [转载请注明出处和署名,谢谢!] 为什么要进行SQL优化呢?很显然,当我们去写sql语句时: 1会发现性能低 2.执行时间太 ...

  8. 搞懂MySQL InnoDB B+树索引

    一.InnoDB索引 InnoDB支持以下几种索引: B+树索引 全文索引 哈希索引 本文将着重介绍B+树索引.其他两个全文索引和哈希索引只是做简单介绍一笔带过. 哈希索引是自适应的,也就是说这个不能 ...

  9. mysql系列十、mysql索引结构的实现B+树/B-树原理

    一.MySQL索引原理 1.索引背景 生活中随处可见索引的例子,如火车站的车次表.图书的目录等.它们的原理都是一样的,通过不断的缩小想要获得数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的 ...

随机推荐

  1. 10、SpringBoot-CRUD登陆拦截

    1.前端页面的设置 index.html <input type="text" class="form-control" name="usern ...

  2. Web Mercator公开的小秘密

    网上已经有好多作者都不吝笔墨,写了好多有关 Web Mercator这个坐标系的前世今生.多搜罗多摄入,我们会得到很多有用的信息.今天讨论到 3758,3857,102100,900913…… 这些I ...

  3. [转]C#如何获取客户端IP地址

    代码如下: /// <summary> /// 获取客户端IP地址    /// </summary> /// <returns></returns> ...

  4. LeetCode22.括号生成 JavaScript

    给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结果为: [ "((()))", "(()())& ...

  5. Django开发BUG汇总

    使用版本知悉 limengjiedeMacBook-Pro:~ limengjie$ python --version Python :: Anaconda, Inc. limengjiedeMacB ...

  6. oracle 12如何解锁账户锁定状态及修改忘记的密码

    有两种方法,大同小异吧,感觉命令真是个好东西,哈哈哈哈,挽救了我安了4次才安好的oracle!!! 方法一: 1.如果忘记密码,找到忘记密码的是哪个用户身份,如果用户被锁定,可以使用下面说的方法解除锁 ...

  7. iOS之动态计算文字的高度

    + (CGSize)boundingALLRectWithSize:(NSString *)txt Font:(UIFont *)font Size:(CGSize)size { NSMutableA ...

  8. mysql 8.0.12安装步骤

    首先从官网下载压缩包: 解压压缩包到指定目录,在目录下新建my.ini,配置内容如下; [mysqld]  # 设置3306端口  port=3306  # 设置mysql的安装目录  basedir ...

  9. Django学习笔记3-静态文件调用

    1.settings.py 静态文件相关示例代码及说明: # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.c ...

  10. redhat系统升级openssh到7.5

    注意,注意,注意重要的事情说三遍,关于ssh的升级不能完全按照别人的教程进行升级,因为每台生产机器都是不一样的,有可能别人能升级成功但是另外一个就可能会失败,因为每台机器上面跑的应用是不一样的,涉及到 ...