欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

mysql索引 b+树

程序员文章站 2022-03-03 22:52:49
1、B+树基本概念 B+树的语言定义比较复杂,简单的说是为磁盘存取设计的平衡二叉树 网上经典图,黄色p1 p2 p3代表指针,蓝色的代表磁盘,里面包含数据项,第一层17,35,p1就代表小于17的,p2就代表17-35之间的,p3就代表大于35的,可是需要注意的是,第三层才是真实的数据,17、35都 ......

1、b+树基本概念

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

mysql索引  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.组合索引:

1 create index name_age_address_index on `student`(`name`, `age`, `address`);

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

 


    最左前缀原则:

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

1 select * from table where x='1'
2 select * from table where x='1' and b='1'
3 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%'这种情况索引会失效

1 alter table tablename add fulltext(col1, col2)
2 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)

mysql索引  b+树

3、索引优化

  1、最佳左前缀原则

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

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

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

  5、减少使用select *

mysql索引  b+树

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

 

总结:

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