mysql索引 b+树

1、B+树基本概念

  B+树的言语定义相比较复杂,一言以蔽之是为磁盘存取设计的平衡二叉树

图片 1

  网上经典图,紫色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)

图片 2

3、索引优化

  1、最佳左前缀原则

  2、不要在目录的列上做操作

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

  4、字符串不加单引号会造成索引失利

  5、减少使用select *

图片 3

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

 

总结:

  sql语句怎么用,没有规定必须怎么查,对于数据量小,有时候不须求新确立目录,按照早晚的实际上景况来考虑

    

 

相关文章