V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zxc1234
V2EX  ›  程序员

关于 mysql 优化

  •  
  •   zxc1234 · 2020-04-07 22:58:08 +08:00 · 3521 次点击
    这是一个创建于 1680 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    2.limit 语句的优化

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

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

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

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