MySQL面试题-系类二

导读:本篇文章讲解 MySQL面试题-系类二,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

31、百万级或千万级以上的数据,该如何删除

  • 如果是频繁更新的业务表,应该在使用时间少的时候进行删除,删除的时候可以分批次删除,减少大事务的产生导致业务更新出问题
  • 也可以先删除索引,在删除无用数据最后在重建索引

32、什么是最左前缀原则?什么是最左匹配原则?

  • 最左前缀原则,就是最左优先,在创建多列索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边。
  • 创建联合索引的时候,例如(a,b,c),相当于创建了(a),(a,b)和(a,b,c)三个索引,这就是最左匹配原则

33、覆盖索引、索引回表以级索引下推

CREATE TABLE `t` (
  `id` int(11) NOT NULL,
  'name' varchar(128) NOT NULL,
  'address' varchar(128) NOT NULL,
  'age' int NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`),
  KEY `idx_nameAge`(`name`,'age'),
  KEY 'idx_address'('address')
) ENGINE=InnoDB;
  • 索引覆盖查询的时候,根据非聚簇索引查出
select id,name from t where name = 'nj';
  • 索引回表:根据二级索引查不出所有数据需要回主键索引叶子节点查所有数据
select * from t where name 'nj';
  • 索引下推:对查出的结果进行过滤减少回表次数
select * from t where name like '张%' and age =10;

34、B+树在满足聚簇索引和覆盖索引的时候不需要回表查询数据

  • InnoDB中,只有主键是聚簇索引,如果没有主键,则挑选一个唯一键建立聚簇索引。如果没有唯一键,则隐式的生成一个键来建立聚簇索引。
  • 当查询使用聚簇索引时,对应的叶子节点可以获取到整行数据,因此不需要在回表查询。

35、从锁的类别角度讲,MySQL都有哪些锁呢?

//共享锁
select * from table where ? lock in share mode;
//排它锁
select * from table where ? for update;	
  • 共享锁(S):又称读锁。 允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。
  • 排他锁(X):又称写锁。 允许获取排他锁X的事务更新数据,阻止其他事务取得相同的数据集共享读锁S和排他写锁X。若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。
      排他锁指的是一个事务在一行数据加上排他锁后,其他事务不能再在其上加其他的锁。加过排他锁的数据行在其他事务种是不能修改数据的,也不能通过for update和lock in share mode锁的方式查询数据,但可以直接通过select …from…查询数据,因为普通查询没有任何锁机制。
      为了允许行锁和表锁共存,实现多粒度锁机制,InnoDB还有两种内部使用的意向锁(Intention Locks),这两种意向锁都是表锁。
  • 意向共享锁(IS):事务打算给数据行共享锁,事务在给一个数据行加共享锁前必须先取得该表的IS锁。
  • 意向排它锁(IX):事务打算给数据行加排他锁,事务在给一个数据行加排他锁前必须先取得该表的IX锁。
    锁兼容问题

36、MySQL中InnoDB当中的行锁如何实现实现

  • for update 可以根据条件来完成行锁锁定,并且 id 是有索引键的列,如果 id 不是索引键那么InnoDB将实行表锁。
select id,name,address,age from t where id = 1 for update;

select * from t where id = 1 lock in share mode;

37、什么是视图?为什么要使用视图?

  • 视图时一个虚拟的表,是一个表中的数据经过筛选后显示方式,视图由一个预定义的查询select语句组成。
  • 为了提高复杂SQL语句的复用性和表操作的安全性,MySQL数据库管理系统提供了视图特性。

38、视图的特点以级使用场景

视图特点:

  • 视图的列可以来自不同的表,是表的抽象和在逻辑意义上建立的新关系。
  • 视图是由基本表(实表)产生的表(虚表)。
  • 视图的建立和删除不影响基本表。
  • 对视图内容的更新(添加,删除和修改)直接影响基本表。
  • 当视图来自多个基本表时,不允许添加和删除数据。

视图用途:简化sql查询,提高开发效率,兼容老的表结构。

视图使用场景:

  • 重用SQL语句;
  • 简化复杂的SQL操作。
  • 使用表的组成部分而不是整个表;
  • 保护数据
  • 更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据。

39、视图的优缺点

  • 查询简单化。视图能简化用户的操作
  • 数据安全性。视图使用户能以多种角度看待同一数据,能够对机密数据提供安全保护
  • 逻辑数据独立性。视图对重构数据库提供了一定程度的逻辑独立性

40、count(1)、count(*) 与 count(列名) 的区别?

  • count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL
  • count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL
  • count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。
    count(列名)

41、什么是触发器?触发器的使用场景都有什么

可以对某个表添加触发器,某个操作之后触发触发器操作。

  • 可以通过数据库中的相关表实现级联更改;
  • 实时监控某张表中的某个字段的更改而需要做出相应的处理;

42、MySQL的6种类触发器

  • Before Insert
  • After Insert
  • Before Update
  • After Update
  • Before Delete
  • After Delete

43、MySQL 约束有哪几种?

  • NOT NULL:该字段不能为NULL
  • UNIQUE:该字段具有唯一性约束,一个表允许有多个UNIQUE;
  • PRIMARY KEY:约束该字段唯一不可重复,一个表只允许有一个主键;
  • FOREIGN KEY: 用于预防破坏表之间连接的动作,也能防止非法数据插入外键。
  • CHECK: 用于控制字段的值范围。

44、varchar(字段大小值)的含义?

  • 该字段最多存放设置的字段大小值;
  • 该字段存储值固定字符串所占的空间一样,设置字段大小值越大,后者在排序时会消耗更多内存。

45、delete、drop和truncate 删除表的对比

delete drop truncate
类型 DML DDL DDL
是否可回滚 可以 不可以 不可以
删除内容 根据条件删除数据,表结构还存在 从数据库删除表,所有数据行以级索引和权限也被删除 重建表,删除所有数据保留表结构
删除速度 谨慎使用容易造成大事务,一般在业务低峰期进行 删除速度最快 删除速度快

46、UNION 与UNION ALL的区别

  • UNION:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
  • UNION ALL:对两个结果集进行并集操作,包括重复行,不进行排序;

47、主键使用自增ID还是UUID,为什么?

如果是单机的话使用自增id,如果是分布式系统优先考虑UUID,可参考雪花算法。

  • 自增ID:数据存储空间小,查询效率高。但是如果数据量过大,会超出自增长的值范围,多库合并,也有可能有问题。
  • UUID:适合大量数据的插入和更新操作,但是它无序的,插入数据效率慢,占用空间大。

48、MySQL的自增主键id值用完了该如何呢?

49、MySQL字段为什么要求定义字段非空?

  • 因为null值可能会比原有字段占用更多字节,也有可能会导致查询的时候索引失效

50、MySQL数据库cpu突然飙升,该如何排查问题呢?

  • 使用top命令查看是mysqld导致还是其他原因;
  • 如果是mysqld导致的,show processlist,查看session情况,确定是不是有消耗资源的sql在运行。
  • 找出消耗高的 sql,看看执行计划是否准确, 索引是否缺失,数据量是否太大。
  • kill 掉这些线程(同时观察 cpu 使用率是否下降);
  • 进行相应的调整(比如说加索引、改 sql、改内存参数);
  • 还有肯能是sql消耗资源并不大,而是在某一时间大量session连接进来导致CPU飙升。

你知道的越多你不知道的越多

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/77239.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!