For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
1、说一下数据库的三大范式?
第一范式:字段原子性,第二范式:行唯一,有主键列,第三范式:每列和主键列都相关。
实际应用中会通过冗余少量字段来少关联表,提升查询效率。
2、只查询一条数据,但是也执行非常慢,原因一般有哪些?
·MySQL数据库本身被堵住了,比如:系统或网络资源不够
·SQL语句被堵住了,比如:表锁,行锁等,导致存储引擎不执行对应的SQL语句
·确实是索引使用不当,没有走索引
·表中数据的特点导致的,走了索引,但回表次数庞大
3、count(*)、count(0)、count(id)实现方式的区别?
·对于count(*)、count(常数)、count(主键)形式的count函数来说,优化器可以选择扫描成本最小的索引执行查询,从而提升效率,它们的执行过程是一样的。
·而对于count(非索引列)来说,优化器选择全表扫描,说明只能在聚集索引的叶子结点顺序扫描。
·count(二级索引列)只能选择包含我们指定的列的索引去执行查询,可能导致优化器选择的索引执行的代价并不是最小。
4、误删数据怎么办?
1)如果数据量比较大,用物理备份xtrabackup。定期对数据库进行全量备份,也可以做增量备份。
2)如果数据量较少,用mysqldump或者mysqldumper,再利用binlog来恢复或者搭建主从的方式来恢复数据,可以从以下几个点来恢复:
·DML误操作语句:可以通过flashback,先解析binlog event,然后在进行反转。
·DDL语句误操作:只能通过全量备份+应用binlog的方式来恢复数据。一旦数据量比较大,那么恢复时间就特别长。
·rm 删除:使用备份跨机房,或者最好是跨城市保存。
5、drop、truncate 和 delete 的区别
·DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。
·TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器,执行速度快。
·drop语句将表所占用的空间全释放掉。
6、MySQL大表查询为什么不会爆内存?
·MySQL 是“边读边发的”,这就意味着,如果客户端接收得慢,会导致 MySQL 服务端由于结果发不出去,这个事务的执行时间变长。
·服务端并不需要保存一个完整的结果集。取数据和发数据的流程都是通过一个next_buffer来操作的。
·内存的数据页是在 Buffer Pool (BP) 中管理的。
InnoDB 管理 Buffer Pool 使用改进的 LRU 算法,是用链表来实现的。在 InnoDB 实现上,按照 5:3 的比例把整个 LRU 链表分成了 young 区域和 old 区域,确保大批量加载冷数据时不会冲掉热点数据。
【免责声明】本文部分系转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与联系我们,我们会予以更改或删除相关文章,以保证您的权益!