面试题-Mysql
主页
标签
文章
### B树和B+数的区别? **B树:** 1. 一个节点有多个元素 2. 排了序,左边都比父节点小,右边都比父节点大 ,节点内的元素也排序过 **B+树的特点:** 1. 一个节点里面有多个元素 2. 排了序,左边的子节点比父节点小,右边的子节点比父节点大 3. 叶子节点之间有指针 4. 非叶子节点上的元素都冗余了一份在叶子节点上 ### Innodb中的B+树是怎么产生的? 在Innodb中有页的概念, 单页的大小是16kb,每次在操作的时候,是分页取数据,一次将整页数据从磁盘取出来放到内存,CPU再从内存中一行一行读取 ![](/api/file/getImage?fileId=65e89d124521a0000d0007a9) 这个排序是主键索引,生成了这些页,变成了B+树,查询就会变快 没有索引的就只能全表扫描 ,在叶子节点上从左往右找 ### Innodb是如何支持范围查找能走索引的? select * from t where a>6,也可以利用索引,先找到a=6,然后就能找到它后面的所有数据 ### 联合索引的B+树 ![](/api/file/getImage?fileId=65e89d124521a0000d0007a8) ### 范围查找导致索引失效的原因分析? 如果联合索引,查出的数据比较多, 比如总共10条,要查b>1的数据,能用联合索引查到索引内的值,但是没有*全部数据, 需要根据存的主键再次回表查询,这样的速度不如直接全表查询快 但是如果查询的是>9的数据,找到的结果只有一个,只拿到了一个主键,这样再回表查询就更快些,就还会使用索引 ### Mysql中的数据类型转换有哪些要注意的? 如果a字段是int类型,传入的where条件用了字符串,比如a='b',那么,mysql会把这个b先转成0,再查询,如果真的有a=0这样的数据, 那就会由a='b'查出a=0的数据 相反的如果a字段是varchar类型, 传入的where条件用了int,比如a=1,那么mysql会把表中所有的a字段的字符值全部变成0(字符串数字会变成数字),然后再和1比对,这样虽然查不出,但是还是查了全表,如果查询的是a=0,那么很惊奇的还会查出全表的数据
上一篇:
面试题-Mysql基础
下一篇:
面试题-Spring
Title
-
Artist
0:00