Mysql高频

1. 唯一索引比普通索引快吗 , 为什么
唯一索引不一定比普通索引快 , 还可能慢 .
1. 查询时 , 在未使用 limit 1 的情况下 , 在匹配到一条数据后 , 唯一索引即返回 , 普通索引会继续匹配
下一条数据 , 发现不匹配后返回 . 如此看来唯一索引少了一次匹配 , 但实际上这个消耗微乎其微 .
2. 更新时 , 这个情况就比较复杂了 . 普通索引将记录放到 change buffer 中语句就执行完毕了 . 而对
唯一索引而言 , 它必须要校验唯一性 , 因此 , 必须将数据页读入内存确定没有冲突 , 然后才能继续操
. 对于 写多读少 的情况 , 普通索引利用 change buffer 有效减少了对磁盘的访问次数 , 因此普通
索引性能要高于唯一索引 .
2. MySQL 由哪些部分组成 , 分别用来做什么
1. Server
连接器 : 管理连接 , 权限验证 .
分析器 : 词法分析 , 语法分析 .
优化器 : 执行计划生成 , 索引的选择 .
执行器 : 操作存储引擎 , 返回执行结果 .
2. 存储引擎 : 存储数据 , 提供读写接口 .
3. MySQL 查询缓存有什么弊端 , 应该什么情况下使用 , 8.0
版本对查询缓存有什么变更 .
查询缓存可能会失效非常频繁 , 对于一个表 , 只要有更新 , 该表的全部查询缓存都会被清空 . 因此对
于频繁更新的表来说 , 查询缓存不一定能起到正面效果 .
对于读远多于写的表可以考虑使用查询缓存 . 8.0 版本的查询缓存功能被删了 ( . ).
4. MyISAM InnoDB** 的区别有哪些
InnoDB 支持事务 , MyISAM 不支持 .
InnoDB 支持行级锁 , MyISAM 支持表级锁 .
InnoDB 支持多版本并发控制 (MVVC), MyISAM 不支持 .
InnoDB 支持外键 , MyISAM 不支持 .
MyISAM 支持全文索引 , InnoDB 部分版本 不支持 ( 但可以使用 Sphinx 插件 )
5. MySQL 怎么恢复半个月前的数据
通过整库备份 +binlog 进行恢复 . 前提是要有定期整库备份且保存了 binlog 日志 .
6. MySQL 事务的隔离级别 , 分别有什么特点
1. 读未提交 (RU): 一个事务还没提交时 , 它做的变更就能被别的事务看到 .
2. 读提交 (RC): 一个事务提交之后 , 它做的变更才会被其他事务看到 .
3. 可重复读 (RR): 一个事务执行过程中看到的数据 , 总是跟这个事务在启动时看到的数据是一致的 .
然在可重复读隔离级别下 , 未提交变更对其他事务也是不可见的 .
4. 串行化 (S): 对于同一行记录 , 读写都会加锁 . 当出现读写锁冲突的时候 , 后访问的事务必须等前一个
事务执行完成才能继续执行 .
7. 做过哪些 MySQL 索引相关优化
尽量使用主键查询 : 聚簇索引上存储了全部数据 , 相比普通索引查询 , 减少了回表的消耗 .
MySQL5.6 之后引入了索引下推优化 , 通过适当的使用联合索引 , 减少回表判断的消耗 .
若频繁查询某一列数据 , 可以考虑利用覆盖索引避免回表 .
联合索引将高频字段放在最左边 .
8. 简要说一下数据库范式
第一范式 : 属性不可再分 .
第二范式 : 在一范式的基础上 , 要求数据库表中的每个实例或行必须可以被惟一地区分 . 通常需要为
表加上一个列 , 以存储各个实例的惟一标识 . 这个惟一属性列被称为主关键字或主键 .
第三范式 : 在二范式的基础上 , 要求一个数据库表中不包含已在其它表中已包含的非主关键字信息 .
所以第三范式具有如下特征: 1). 每一列只有一个值 . 2). 每一行都能区分 . 3). 每一个表都不包含其
他表已经包含的非主关键字信息 .
9. 一千万条数据的表 , 如何分页查询 数据量过大的情况下 , limit offset 分页会由于扫描数据太多而越往后查询越慢 . 可以配合当前页最后
一条 ID 进行查询 , SELECT * FROM T WHERE id > #{ID} LIMIT #{LIMIT} . 当然 , 这种情况下 ID 必须
是有序的 , 这也是有序 ID 的好处之一 .
10. 订单表数据量越来越大导致查询缓慢 , 如何处理
分库分表 . 由于历史订单使用率并不高 , 高频的可能只是近期订单 , 因此 , 将订单表按照时间进行拆分 ,
据数据量的大小考虑按月分表或按年分表 . 订单 ID 最好包含时间 ( 如根据雪花算法生成 ), 此时既能根据订
ID 直接获取到订单记录 , 也能按照时间进行查询 .
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值