JAVA面试题----MYSQL
MYSQL。
- mysql使用的引擎是InnoDB,它有四大特性:1 插入缓冲 2 二次写 3 自适应hash索引(ahi),就不用走B+树了;4预读。使用InnoDB因为它是事务安全的存储引擎,它具备提交,回滚以及崩溃恢复的功能以及保护用户数据。
- MYSQL的索引分类:1主键索引2,唯一索引 3.复合索引 4普通索引.5 全文索引。6聚集索引:将数据存储与索引放在一起,通过找到索引找到数据。
- 索引的优点与缺点:优点:提高查询效率,提高检索效率,可以通过索引进行排序。缺点:索引会占据磁盘空间,它可以提高查询效率但是会降低更新表的效率,维护索引需要消耗数据库的资源。
- 什么时候索引会失效:函数运算,模糊查询,字符串与数字的比较不走索引,正则表达式不使用索引 ,mysql内部优化器会对sql语句进行优化,如果优化器全表扫描比使用索引扫描快,就不使用索引。在使用复合索引的时候没有遵守最左前缀法则。
- Mysql的B+树:特点:1对节点进行排序 2 一个节点可以存储多个元素 3 叶子节点之间有指针 4 子结点上存储了所有的元素并对其进行排序。
- Mysql的索引使用B+树,因为B+树对数据进行了排序,提高查询效率,一个节点可以存储多个元素,从而使B+树高度不会太高。叶子节点之间有指针,可以很好支持全表扫描,范围查询等。
- 慢查询:一般都以查询速度来定义是否为慢查询,其实就是查询很慢。场景:分页列表多条件查询,子查询,多表联查,海量数据。慢查询不仅会降低用户体验而且非常消耗数据库。
- 解决:exlpain分析sql执行计划表。
- 可以从12个参数中获取1表的加载顺序 2.sql的查询类型 3.可能用到的那些索引 4表与表之间的引用关系 5一个表中有多行被优化器查询了。
- 联合索引:两个或更多个列上的索引叫做复合索引。如果使用了联合索引要遵守最左前缀法则:查询从索引的最左列开始,并且不跳过索引中的列,如果跳了将会部分失效(后面的字段会索引失效)。、
- 联合索引的好处:1减少开销,建立一个联合索引(a,b,c)相当建立了三个索引。2效率高,多条件查询,索引列越多,选出的数据就越少。
- 对sql做过那些优化:避免使用select*,避免使用or,避免在字段开头模糊查询,尽量避免索引失效。
- Mysql的回表查询:普通索引无法直接定位记录。通常需要扫描两遍索引树,先通过普通索引定位到主键值,再通过聚集索引定位到行记录。
- 覆盖索引:只需在一颗索引树上就能获取SQL所需的所有列数据,无需回表,速度更快。
- Mysql的读写方案:实现主要通过主从复制,通过理由的方式使应用对数据库的写请求只在Master上进行,读请求在slave(从)上进行,一主多从;
- 方案1:基于Mysql代理实现:在数据和应用之间添加代理层,根据不同的请求请发到不同的实例,在读写分离的时候还可以进行负载均衡。常见代理使mycat
- 方案2:基于应用内路由:使用aop来实现,拦截spring项目dao层方法,根据方法名判断要执行的类型(在aop中判断),从而动态切换主从数据源。
- 基于sharding-JDBC :使用sharding-sphere读写分离中间件。
- mysql的存储过程:存储过程就是事先经过编译并存储在数据库中的一段SQL语句的集合。作用:调用存储过程可以简化开发工作,减少数据在数据库和应用服务器之间的传输,可以提高数据的处理效率。特点:封装复用,可以接受参数和返回数据,减少网络的交互。调用:call 存储过程名(参数)。
- 哪些情况不要创建索引:1/表记录太少 2.经常增删改的表字段(提高查询效率,降低更新表的效率)。3.where条件里用不到的字段不要创建索引,索引创建多了会影响增删改的效率。4.数据重复且分布平均的表字段。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通