MySQL调优

MySQL调优

  • 常见的回答
  • 如何回答效果更好
  • 业务层的优化
    • 如果只能用mysql该如何优化
  • 代码层的优化
  • SQL层面优化
  • 总结

常见的回答

SQL层面的优化——创建索引,创建联合索引,减少回表。再有就是少使用函数查询。

回表指的是数据库根据索引(非主键)找到了指定的记录所在行后,还需要根据主键再次到数据块里获取数据。

如何回答效果更好

我们把SQL优化,分为四层:
1、业务上的优化
2、代码层的优化
3、sql层面的优化(包含索引优化)
4、硬件层优化

硬件层的优化,其实都是运维,所以硬件层的优化,是由团队其他成员完成的。

业务层的优化

表里面十多亿的数据,这里我们进行了分库分表和集群。索引什么的已经优化到最好。

vip 1级可以看多少数据,5级可以看全部的数据

查数据,其实肯定都是分页查,分页的下面是有一个count

我不用mysql了,我直接上es。这是一个办法。

我可以一页一页的来缓存。也是一个办法。

es。我们就一周的开发周期。这块已经是外包开发完了,但是做接口压测时候,接口不通,因为数据太多,服务器直接卡住了,一个sql可以查询几十秒。

es。我们为什么不上es,第一点就是时间短,第二点就是因为不是我们写的代码,业务不熟悉没法直接改外包的代码。第三点就是外包人员技术参差不齐。对es不太熟悉。

如果只能用mysql该如何优化

首先就是可以业务上的优化,可以说跟产品经理交流,比如默认级的用户上来访问,直接让他默认就带一些查询条件,这时候,他的查询就会筛选过滤。这样再查数据的话,就会比较的快。

其次,因为这里count我们就必须给他改了。count我们单独给他写出来。

如果这时,count依然是十几亿的数据,那只能从代码层面进行优化了。

代码层的优化

数据库上的设计层面。

我们当时是单独建立了一张表,然后这个表存储了数据表名称,主键,count数。

如果是加数据的话我们会异步的往这个表去+1数据。然后就是查询的时候,count值直接查询这个表里面count这个列就能把数据查询出来了。

count的问题就解决了。

SQL层面优化

最简单最直接的,其实就是创建联合索引。减少回表,也就是说所有数据直接在这一个索引树下就查询出来了。

连表查询,连表查的比较多了,比较慢了,这时候索引怎么建用处都不太明显了。这时可以代码层面做优化,写两个sql,查询出来数据,做拼装。

总结

我们面试的时候,sq优化问你了,你要如何去说:

  1. 首先,一定要结合自身的项目来谈优化,根据你项目的数据量并发高的部分,来谈如何优化,而不是上来直接
    说优化的话就是创建联合索引,尽量别使用函数查询。

  2. 其次就是,跟面试官谈具体的优化经过,比如慢查询警报,例如企业微信发警报日志或者发短信提醒。根据日志去查询慢查询的sql。

查询出来了,可以结合代码,根据实际情况去修改。

参考资料:(全网讲的最好)面试被问到mysql调优如何回答

你可能感兴趣的:(MySQL,mysql,数据库,java)