数据库面试题及优化手段
1..尽量避免大事务操作,提高系统并发能力。
2.大事务
1.定义:运行时间比较长,操作的数据比较多的事务
2.大事务风险:
a)锁定太多的数据,造成大量的阻塞和锁超时,回滚所需要的时间比较长。
b)执行时间长,容易造成主从延迟
3.如何处理大事务
a)避免一次处理太多大数据
b)移出不必要在事务中的select操作
3.什么是主从复制?(引入主从复制数据会有延迟)
主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一般是准实时的业务数据库。
4.主从复制的作用?
1:做数据的热备,作为后备数据库,主数据库服务器故障后,可切换从数据库继续工作,避免数据丢失。
2:架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘访问的频率,提高单个机器的性能。
3:读写分离,使数据库能支撑更大的并发。在报表中尤其重要。由于部分报表sql语句非常的慢,导致锁表,影响前台服务。如果前台使用master,报表使用slave,那么报表sql将不会造成前台锁,保证了前台速度。
4.主从复制的原理:
1.数据库有个bin-log二进制文件,记录了所有sql语句。
2.我们的目标就是把主数据库的bin-log文件的sql语句复制过来。
3.让其在从数据的relay-log重做日志文件中再执行一次这些sql语句即可。
5.什么是读写分离(写主,读从)
读写分离就是主从集群,一主多从,或者一主一从,就是根据数据库主机复制写入操作,从机负责读的操作,主机写入以后在同步给从机。基本原理就是将数据库的读写操作分配到不同的节点,根据主从复制集群的特性进行扩展开发。
6.从代码层了解实现的思路?
明确一点,那就是读的时候用从库,写的时候用主库,这一点是重中之重,这就是需求,根据这个需求去演化我们的代码,无非就是用两个或者多个数据源DataScoure,一个主的数据源DataScoure,另外一个是一个或者多个从的数据源DataScoure。
1,通过两份ORM去操作;
2,采用AOP的方式去实现
7.读写分离带来的问题以及我们自己的思考?(会引入程序的复杂性)
读写分离以后,我们数据库同步数据的时候,会存在延迟的问题,这个延迟是数据量的增加延迟也会越来越久,但是有些业务是要求实时,我们该如何去处理这个问题。
举个例子,就按照登录来说,假设在某个网站上注册一个账号,该网站注册这个业务采用的是读写分离的设计,这个时候我们在注册完成后,需要立即登录,这个时候登录不上,因为这个时候做登录的时候访问不到该注册信息,就会提示用户不存在,延迟在2-3之间。
处理方式:如果业务没有要求必须实时,一般提倡忽略这种问题,避免带来程序的复杂性,如果提了可以从两个方面来处理。
后端读取方面 || 用户体验感方面
1,数据库层面:数据库层面可以采用暴力读取也就是一次读取主机的方法,什么是读取主机,比如说我们的登录操作,如果从从库读取不到,我们再次读取主机看该数据是否存在,这样主机压力很大,可能导致主机崩溃,因为库里有海量数据的用户,就会增加频繁的DB读写。
2,从界面层面:还是以登录为例,我们在很多网站注册完成后,会出现这样的情况,比如等待几秒跳转或者阅读下什么规则,这个时候我们考虑下为什么他要这么做,当然一部分可能是真的规定,但有时候等待几秒的跳转的动画,这个时候主从已经完成了同步。
注*:读写分离不是银弹,并不是一有性能问题就上读写分离,而是应该先优化,例如优化慢查询,调整不合理的业务逻辑,引入缓存查询等只有确定系统没有优化空间后才考虑读写分离集群!(数据库的架构方面--先是主从复制 → 读写分离(写从读主) → 分库分表(对读的一方进行分表策略)在这些基础上一路慢慢的建立扩展起来)
8.数据库索引失效的场景;
1,like未使用最左前缀,where A like '%China';
2,搜索一个索引而在另一个索引上做order by,where A=a order by B,只使用A上的索引,因为查询只使用一个索引
3,or会使索引失效。如果查询字段相同,也可以使用索引。例如where A=a1 or A=a2(生效),where A=a or B=b(失效)。
4,在索引列上的操作,函数(upper()等)、or、!=(<>)、not in等
5,对索引列进行运算导致索引失效,我所指的对索引进行运算包括
6,不要将空的变量值直接与比较运算符(符号)比较。
7, delete
数据库面试题及优化手段相关推荐
- 混合索引_数据库面试题:查询在什么情况下不?索引-数据库知识点
查询在什么情况下不⾛索引 数据库面试题 ⾸先,我们可以说通过explain去排查⼀个慢查询,进⽽找到它的索引(参看第五题),当创建索引却不⾛索引时,我们就需要考虑到优化器的问题. 在⼀条单表查询语句真 ...
- datagrid如何获取一行数据中的某个字段值_或许是全网最全面关于数据库面试题...
原文: https://www.enmotech.com/web/detail/1/794/1.html 两万字全面论述数据库面试题(上) https://www.enmotech.com/web/d ...
- 计网/数据库面试题(更新中ing~~)
计网/数据库面试题(更新中ing~~) <计算机网络> 1. OSI七层模型.设备 (传输层)协议的多路分用和复用 2. TCP/IP四层模型==五层模型 (传输层)TCP和UDP协议对比 ...
- C# 联合查询_直击数据库面试题:数据库查询语句
Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 问题 ...
- MySQL数据库面试题(2021最新版)
文章目录:http://github.crmeb.net/u/defu 数据库基础知识 为什么要使用数据库 什么是SQL? 什么是MySQL? 数据库三大范式是什么 mysql有关权限的表都有哪几个 ...
- Oracle数据库面试题 精选 Oracle 面试题
Oracle数据库面试题 1.解释冷备份和热备份的不同点以及各自的优点 冷备份 发生在数据库已经正常关闭的情况下,将关键性文件拷贝到另外位置的一种说法.适用于所有模式的数据库. 优点 1. 是非常快速 ...
- SQL编程软件测试,编程程题库之软件测试8大常见数据库面试题
原标题:编程程题库之软件测试8大常见数据库面试题 一.事务的四大特性 原子性,要么执行,要么不执行 隔离性,所有操作全部执行完以前其它会话不能看到过程一致性,事务前后,数据总额一致持久性,一旦事务提交 ...
- mysql纵表 主键_数据库面试题-sql语句
原标题:数据库面试题-sql语句 1,写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的. 答: → 解1: select top ...
- 复试面试-数据库面试题
将网上常见的数据库面试题整理一下,方便自己和有需要的人学习. 1.事务 概念:访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位.事务由事务开 ...
- 2020字节跳动数据库面试题及答案(二)—— NoSQL部分
本文答案整理为原创,转载请说明出处 文章目录 redis 的底层数据结构有哪些 redis 中的 SDS 和 C 语言中的字符串有什么区别,优点是什么 redis 中的字典是如何实现的,如何解决冲突和 ...
最新文章
- 数据结构(三) 用java实现七种排序算法。
- 算法开发人员的安身之本:如何将机器学习与各行各业进行深度结合
- GitHub 的项目徽章
- 中国顶级 AI 研究者数量仅为美国 1/5:美国智库最新全球 AI 实力报告
- Windows10下git bash中添加wget下载工具
- 如何学习linux编程(转载)
- 想写Python爬虫?看这5个教程就行了!
- Linux操作系统的性能将主要取决于,大学计算机基础试题题库及复习资料
- 使用Python+turtle绘制同心圆
- python终止线程_Python里怎么终止一个线程
- windows mysql5.7 忘记root密码
- linux根据端口号查询项目路径
- 如何写好一份专利交底书?
- jQuery操作input值总结
- qq刷屏代码可复制_QQ小程序「神奇字体」从注册到发布
- 使用pytorch实现crnn
- 打开UG8.0出现启动界闪一下就没有任何反应了怎么回事?
- 使用idea中JD-Intellij插件反编译
- 关于港股通交易的规则
- Intellij IDEA误删文件恢复