数据库问答

问:数据库事务?
答:ACID
原子性:全部成功、全部失败;
一致性:事务前后数据不会被破坏;
隔离性:事务之前有隔离,互不影响;
持久性:事务提交的数据修改的永久性的不会丢失;

问:事务隔离级别?
答:
读未提交:脏读,一个事务可以读取到另一个事务未提交的数据,因为未提交事务可能会回滚;
读已提交:不可重复读,一个事务读取到了另一个事务已提交的修改的数据,导致当前事务读取数据结果不一致;
可重复读(Mysql):幻读,一个事务可以读取到其他事务的数据仅可读取一次,期间数据被修改也会改变读取的值,读取到的数据可能不是最新的
串行化:事务完全串行同步化执行;

问:Mysql存储引擎和区别?
答:
InnoDB:事务型存储引擎,支持事务隔离级别;索引用的是聚簇索引,在索引中保存了数据避免直接读磁盘适合主键查询;还有课预测性读、Hash索引、插入缓冲区等功能,支持行级锁;
支持MVCC,多版本并发控制:事务隔离级别的实现方案,具体用到了版本号机制(乐观锁),事务前后数据版本号是否有被修改过;

MyiSam:不支持事务,不支持行级锁;支持压缩表和空间索引(索引数据被修改后不会马上写入磁盘而是在缓冲区内存,表关闭了再刷盘)

问:Mysql索引结构?
答:
B+数索引:查询性能稳定,IO低,具备有序性适合排序,时间复杂度O(logn);
哈希索引:查询最快时间复杂度O(1),无序,适合精确查找;
全文索引:InnoDb和myisam都支持的索引,做关键字匹配
空间索引:Myisam支持的索引,多维数据索引,地理GIS数据;

问:SQL语句调优修改思路?
答:
(1) 通过日志,记录出执行慢的SQL语句
(2) 使用explain执行计划,对SQL语句进行分析,看它是顺序查询还是索引查询,顺序查询就会比较慢
(3) 顺序查询向索引查询优化,比如新增索引,优化索引用法,比如不要用索引字段计算、in、like %xx%、
(4) 嵌套循环优化,关联多表查询优化、查询数据量优化

问:数据库调优经验?
答:如果SQL执行慢则优化SQL语句,
事务冲突,看情况降低事务隔离级别;
如果数据量多的读性能瓶颈则读写分离、引入缓存;
如果是数据量特别大,分表分库,数据库集群,换nosql;

问:Postgres和Mysql的区别?
答:

  1. pg的数据类型多一些,json、jsonb、数组、xml等
  2. 多一些性能视图,可以看锁冲突次数、事务成功、回滚次数;sql语句状态
  3. 主从备份上Pg更好,支持同步、异步复制,Mysql仅支持异步复制;Pg的复制是基于物理文件,性能高一些,对主机影响较小;Mysql是基于BinaryLog
  4. PG支持序列,不同的表复用相同主键值,Mysql不支持;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值