MySQL|腾讯资深软件测试工程师介绍——mysql 调优思路

MySQL|腾讯资深软件测试工程师介绍——mysql 调优思路

MYSQL:事务隔离级别默认为 repeatable Read(可重复读) 。
【MySQL|腾讯资深软件测试工程师介绍——mysql 调优思路】优化途径:1:存储数据前选择合适的表结构 , 字段结构;
2:随着业务的发展 , 垂直分割表 , 拆分表;
3:使用过程选择合适的查询语法 , 修改语法;

解决方案:
1:mysql创建表时候会选择存储引擎 , 可供选择的大概有七个引擎 , 常用的就两种:InnoDB和MyISAM。 MyISAM支持全文检索 , 如果你的数据是只存储只查询的话 , 例如日志内容 , 推荐使用该存储引擎 , 如果你有修改操作 , 不要使用该存储引擎 , 因为行级操作也会导致表锁 , 只要有修改就会串行化执行 , 这种效率是极低的 。
InnoDB是一个非常复杂的存储引擎(具体怎么复杂我也不清楚) , 对于一些小的应用 , 它会比 MyISAM 还慢 。 他是它支持“行锁”, 于是在写操作比较多的时候 , 会更优秀 。 并且 , 他还支持更多的高级应用 , 比如:事务 , 并且mysql的事务隔离机制 repeattable Read是会导致幻读现象的 , InnoDB通过版本并发控制解决了这个问题 。
我自己大部门项目我默认都会使用InnoDB对于大量读操作的场景 , 如果需要全文检索推荐使用es , 如果日志数据推荐使用mongoDB 。
2:避免使用 SELECT *。
3:如果操作数据时候根据主键id来的 末尾可加上 LIMIT 1 。
4:创建合适的索引 , 索引是提高查询销量最简单粗暴的方法 。
5:表关联后的ON后面的条件 两个字段使用相同类型的字段 , 创建索引 , 表关联操作尽量不要超过三个表 , 如果业务复杂最好通过代码去拆分处理 。
6:字段对应存储的值是相对固定的字符串值 , 比如存储性别 , 城市 , 状态 , 能用int用int , 想要表达含义的话可以用enum , 而不要用varchar 。
7:悲观锁 for Update 语法 一定要用到索引 , 不然执行过程中就会造成表锁
8:如果业务越来越复杂 , 可以对一个复杂的对象进行拆分 , 常用字段 , 主要字段放在一张主表内 , 不常用字段放在副表内 。 总之越小越快 。
9:如果用户量上来 , 数据量扩增起来后 , 可以尝试对表拆分为读写分离方案 , 分库分表方案 。