有关mysql 索引面试题的相关回答思路

有关mysql 索引面试题的相关回答思路

什么是索引?

索引总的来说是表中一列值或多列值排序的数据结构;目的是加快数据的查询速度;

索引为什么能加快数据查询速度;

从数据的角度来说,MySQL表中的数据储存在磁盘中。查询SQL执行时现在内存中找到索引,在通过索引去磁盘查询数据;内存处理数据的速度大于磁盘;

什么是IO问题;

io 问题,翻译一下就是 input,output的问题;数据吞吐效率的问题,数据吞吐效率取决与硬件;开发人员避免io问题最有效的思路是提速:减少io次数,减少io量;能一次取完,尽量不要多次去取;

索引存储在哪?加载方式是什么?

索引在创建后最终是存储在磁盘里的;通过预加载被加载到内存中以供使用;这就是服务器宕机索引不会失效的原因;

加载方式: 当磁盘数据亮较大时,无法一次性加载到内存,便有了分块加载的方式;磁盘与内存交互时有一个最基本的逻辑单位,datapage,其大小与操作系统相关,一般4-8K,读取时可以整数倍读取;

索引是一什么数据结构存储的?为什么使用种结构?

表中的索引是一红B+存储;磁盘做分块下载时,不能一次全读完整颗树,哈希表 本质是数组j+链表,范围查询效率过低; 其他 例如红黑树,BVL树等二叉树均只能由两个分支;空间浪费严重; B树,由于子节点上也存储有数据,因此同层数下所能存储的数据没有B+树多; B+树的子节点上存储的都是键值,不存行数据,因此能存更多数据;一般三-4层的B+树足以支持千万级别数据量存储;

Mysql 一张表中可以有多少个索引?

理论上可以有很多个,个索引对应一颗b+数,一张表有多个B+数结构存在;

多个B+树的情况,数据是怎么存储的?

一张表无论有多少组索引;数据都只存储一份。绑定数据的索引叫聚簇索引,反之叫非聚簇索引。数据绑定在聚簇索引的B+树叶子节点;非聚簇索引叶子节点存储的是 聚簇索引子节点K值;

如果表没有索引数据怎么储存?

(innodb 插入数据必须有索引进行绑定,有主键选择主键,没主键选择唯一键 多个唯一键选择最先定义的唯一键,没唯一键会生个一个6字节的rowID绑定)

什么是数据库的回表?

例 select * from table where name = ‘www’;
id 为主键,name 为普通索引
查询是先去name 的B+ 树上查找ID 的值,再去id的b+树查询行数据;
查询了两次行数据,被称为回表;在查询是尽量避免回表;

什么是索引覆盖;

例 select id,name from table where name = ‘www’;
id 为主键,name 为普通索引
在name 的B+树上,查询到所需的所有数据;叫索引覆盖,推荐使用;

什么是最左匹配:

id,name, age, gender, addressid主键,name,age组合索引
select * from table where name=’zhangsan‘ and age =10:
使用聚合索引

select * from table where name=zhangsan;
不使用聚合索引

select * from table where age =10:s
不使用聚合索引

elect * from table where age =10 and name=zhangsan;
使用聚合索引

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值