在生产环境中,开发人员开用户流程
- 平常企业
- 先确认开发人员的流程是否走通
- 如走通,确认开发人员做哪些操作
- 确认从哪里连过来
- 对哪个库进行操作
- 银行/金融 企业
- 严格意义上来说,root权限谁都不给
- 谁私下要,就全公司通报
union 和 union all的区别
- union all: 不做去重复(一般使用这个)
- union: 去重复操作,去重复的话会涉及到排序和计算,查询效率就降下来了。所以生产一般不用
我们在sqlyoung写SQL语句,group by 没有问题,但在命令行中就出现问题,能解释一下原因吗?
- 这是5.7中sql_mode 参数默认开启的
select @@sql_mode
- 如果带group by 子句中select 后面的列(非主键列),要么是group by 后面的列,要么是被函数包裹(select 后面的列是由group by 之后才执行的)
聚集索引和辅助索引的区别
- 聚集索引的叶子节点就是数据行,而辅助索引的叶子节点存放有序值+聚集索引列值
- 在有需要的时候, 辅助索引可以成为任何一个列,只是名字不同
- 聚集索引一般有一个,一般为主键
- mysql的表数据是聚集索引组织表
你平常怎么做sql优化的?
你用过什么优化工具?
你对索引这块怎么优化的?
我们公司业务慢,请你从数据库角度分析原因?
mysql 出现性能问题,我遇到以下两种情况?
1 .数据库,突然变慢,夯住了,资源耗尽
处理过程:
-
show processlist;
获取数据库夯住语句 - explain,分析SQL的执行计划,有没有走索引,索引的类型情况
- 建立索引,改写sql语句
2 .数据库每天都有一段时间变的慢 - 记录慢日志slowlog,分析slowlog
- explian分析SQL的执行计划,看有没有走索引,索引类型情况
- 建索引,改语句
同一个语句突然变慢
统计信息过旧,导致索引信息失效。(索引列更新太过频繁,导致索引没有更新过来)???
SBR和RBR 什么区别?怎么选择?
SBR: 可读性强,update t1 set name='zs' where id>5
,直接记录此语句,只记录了一行,对于操作日志量少,但是可能会出现记录不准确,比如 insert into t1 values(c1,'zs',now())
,恢复时,now()函数会发生变化
RBR: update t1 set name='zs' where id>5
,有几行变更了,就记录了几行。可读性弱,对于操作范围日志量大,不会出现记录错误,高可用环境的特性依赖于RBR
我们公司对数据严谨性要求高,也用到了新架构,选择了RBR