关于 mysql 优化

2020-04-07 22:58:08 +08:00
 zxc1234

最近在面试,会被问到 mysql 慢语句的优化问题

一般情况我都是从以下几个方面答的

1.有没有建索引,有没有用到索引,覆盖索引,索引有没有建对

2.limit 语句的优化

3.join 的优化,join_buffer 参数的大小配置

但是感觉面试官对我的评价是:mysql 优化经验不够丰富

想问下大家,一般 mysql 优化是怎么优化法?如果你是面试官,你希望或者要求候选人答到什么程度呢?

3529 次点击
所在节点    程序员
17 条回复
sudden
2020-04-07 23:46:15 +08:00
插个眼,感觉你回答的挺全面的了
opengps
2020-04-07 23:51:43 +08:00
面试官只是在探索你的极限思考,可能你只是没答出来他知道的那一个知识点
苛刻一点的去优化可能符合他的意图,例如~
能用 char 不用 varchar
buliugu
2020-04-07 23:59:34 +08:00
可能是想问 explain (逃
xcstream
2020-04-08 00:08:57 +08:00
多少数据量需要分表分库
liyunlong41
2020-04-08 00:20:42 +08:00
高性能 MySQL 上有讲很多,可以看下,然后总结下
liyunlong41
2020-04-08 00:42:13 +08:00
1.是否加索引
2.能否优化,使用覆盖索引
3.索引加的是否合适
4.尽量使用索引来避免排序操作
5.减少不必要的列查询,减少磁盘读取与网络传输字节
6.大查询切分成小查询,减小加锁的事务
7.分解关联查询,分解成单表查询然后应用层关联
8.应用层加缓存
9.尽可能将随机读优化为顺序读
10.空间换时间,能否冗余一些字段减少慢查询
11.其它等等……
chihiro2014
2020-04-08 00:45:58 +08:00
其实可以去看看 CMU 数据库的,个人感觉讲的还挺全面的
B 站上有搬运视频可以去看看的,而且这个翻译版本很好,顺带强烈安利下他们翻译的 MIT 6.824 ,配合食用更加完美
https://www.bilibili.com/video/av85655193
sourceCoder
2020-04-08 01:04:04 +08:00
我最近为了找工作,需要准备一些数据库基础的知识,找来找去都是一些使用层面的,没有什么深度,但是现在面试都是问的很深,底层的数据结构啊,优化这些,后来在逛 b 站的时候无意中发现的,我点进去发现是国外 CMU 的顶尖数据库课程翻译,翻译的真好,很明白,一下就戳中了我的心,这才是我想要的数据库资料,如果你想学习数据库基础的知识可以去 b 站搜索 simviso 中的 cmu 数据库课程,关键是这个 up 猪太他妈牛逼了,翻译了好多顶尖课程!!真的很良心啦,强烈
MaxFang
2020-04-08 02:48:01 +08:00
6 楼的回复已经比较多了。我个人的思路是分几块。纯 SQL 层面的优化,例如 explain 索引等;代码层面的优化,如 n+1 问题;表设计优化;读写分离,主从;数据库或系统配置;缓存,消息;分表分库等。每部分具体的就不展开说了,都有很多可说的。当然有些可能有些也不全算 MySQL 优化的范畴了。
sanggao
2020-04-08 09:28:13 +08:00
你说的连十分之一都不到,我是面试官,会觉得你压根没做过大流量一点的数据库优化
nanxingyin
2020-04-08 09:33:36 +08:00
慢语句肯定要用 explain 分析的,重要的指标 type 、rows 、extra,type 的值 all 、index 、range 、ref 、eq_ref 等等的含义
hbolive
2020-04-08 10:07:01 +08:00
楼主问的是慢语句的优化,楼上几位虽然回答得还不错,但给整成 mysql 优化了。。
fewok
2020-04-08 11:08:59 +08:00
这只是 SQL 层的优化(说破天,也解决不了硬性需求)
可以加些其他视角的处理。比如,业务层上,有些玩意该砍的砍了(比如贴吧的老贴都砍了),该缩小范围缩小范围(比如:查询范围限制个一年 /一个月)
中间件层也能大做文章,什么日汇总、月汇总、180 天查询、首页查询、用户行为查询、陈年老数据、上亿数据量等等,该上 ES 的上 ES 、该上 hive 的上 hive 、该全部缓存的全部缓存、该增加表的增加表,该冷热分离的冷热分离,该分库分表的分库分表。
2379920898
2020-04-08 11:29:43 +08:00
别问,问就是高性能 MYSQL 四五六章~~估计看一年也看不会
zxc1234
2020-04-08 16:41:41 +08:00
@hbolive mysql 优化也得学啊
zxc1234
2020-04-08 16:59:35 +08:00
@sanggao 如果是 做过大流量一点的数据库优化,那一般会回答什么内容
qloog
2020-04-08 18:03:14 +08:00
可以从几个纬度进行优化:
1 、数据库配置优化 - 主要是一些参数的配置
2 、建表语句优化 - 字段的选型
3 、SQl 语句的优化 - 对索引的使用程度
4 、分库分表的思考
5 、...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/660264

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX