关于MySQL的若干遗留问题(一)

1.如何优化因 MySQL 读写频繁,负载过高导致的CPU高占用率?
一、如果是写比较少,读比较高,可以做读写分离,一主多从;
二、如果是读写都很多 ,使用分库分表,多主多从;

2.MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义?
1)、varchar与char的区别char是一种固定长度的类型,varchar则是一种可变长度的类型 尽可能的使用 varchar 代替 char ,因为首先变长字段存储空间小,可以节省存储空间, 其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。
2)、varchar(50)代表的含义:
varchar(50)中50的涵义最多存放50个字符,varchar(50)和(200)存储hello所占空间一样,但后者在排序时会消耗更多内存,因为order by col采用fixed_length计算col长度(memory引擎也一样) 。int(20)中20的含义:

int(20)中20的涵义是指显示字符的长度但要加参数的,最大为255,比如它是记录行数的id,插入10笔资料,它就显示00000000001 —00000000010,当字符的位数超过11,它也只显示11位,如果你没有加那个让它未满11位就前面加0的参数,它不会在前面加020表示最大显示宽度为20,但仍占4字节存储,存储范围不变。

3.请简洁地描述下 MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别?
四种隔离级别:
read uncommitted 未提交读
read committed 提交读
repeatable read 重复读
serializable 可串行化
不同级别的现象:
脏读:一个事务可以读取到另一个事务尚未提交的数据
不可重复读:两个事务读取同一条记录,两次读取的结果不一样
幻读:在一个事务中,由于其他插入操作事务的提交,导致返回了以前不存在的记录不同的隔离级别有不同的现象,并有不同的锁定/并发机制,隔离级别越高,数据库的并发性就越差

5.若一张表中只有一个字段VARCHAR(N)类型,utf8编码,则N最大值为多少(精确到数量级即可)?

由于utf8的每个字符最多占用3个字节。而MySQL定义行的长度不能超过65535,因此N的最大值计算方法为:(65535-1-2)/3。减去1的原因是实际存储从第二个字节开始,减去2的原因是因为要在列表长度存储实际的字符长度,除以3是因为utf8限制:每个字符最多占用3个字节。

6.[SELECT *] 和[SELECT 全部字段]的2种写法有何优缺点?

  1. 前者要解析数据字典,后者不需要
  2. 结果输出顺序,前者与建表列顺序相同,后者按指定字段顺序。
  3. 表字段改名,前者不需要修改,后者需要改
  4. 后者可以建立索引进行优化,前者无法优化
  5. 后者的可读性比前者要高

7.MySQL中InnoDB引擎的行锁是通过加在什么上完成(或称实现)的?

InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的。InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁!

全部评论

相关推荐

10-15 16:27
门头沟学院 C++
LeoMoon:建议问一下是不是你给他付钱😅😅
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务