Mysql调优

  1. 字段

    • 对于长度固定,建议用定长char。长度不固定,使用varchar。

    • 能用tinyint就不用int,能用int就不用bigint

    • 对于手机号固定长度11位,用bigint代替char,一般的字符集有gbk和utf8,gbk占2字节,utf8占3字节,用它们存储手机号占用的空间分别是22和33字节

    • 尽量使用TimeStamp而不是DateTime

  2. 索引

    • 主键,外键加索引;

    • 关联表在关联字段上加索引;

    • 经常出现在where条件上的加索引,Order by语句用到的字段单独建索引;

    • 组合索引符合最左前缀匹配选择,即where语句中使用最频繁的字段写在组合索引最左边。但是对于=,组合索引不限制顺序。

    • 值分布很少的字段,不适合建索引。如性别字段

    • 哪种情况索引会失效

      • like 以%开头,索引无效;当like前缀没有%,后缀有%时,索引有效。

      • or语句前后没有同时使用索引。当or左右查询字段只有一个是索引,该索引失效,只有当or左右查询字段均为索引时,才会生效

      • 复合索引(column1,column2,column3),必须复合最左原则,否则索引失效。

      • 数据类型出现隐式转化,索引失效。比如字段是varchar类型,然后sql拼接未加单引号。

      • 在索引字段上使用not,<>,!=。优化方案如:key>0 or  key<0

      • 对索引字段进行计算操作、字段上使用函数。

  3. 查询sql

    • OR改写成IN,对于连续数值,使用BETWEEN代替IN

    • 尽量不使用*或count(*)

    • 用exists代替in,但是exists也不是最好的方案

    • 使用limit限定行数

    • 使用distinct 代替 group by

    • 用union all代替union

    • 使用连接查询代替 子查询

    • mysql的explain查询分析也是面试的重点对象,一条分析结果的查询时间,影响行数,走了哪些索引都是分析的依据。

    • join表关联字段使用相同类型,

    • 有节制的使用触发器

  4. 引擎

    • 常用的有两种,innodb和myisam。两种引擎的应用场景???

    • 默认是innodb,innodb是行级锁,行级锁适合于高并发场景。但是锁的力度小,这样就性能损耗大。

    • myisam是表级锁,在没有索引或者索引失效的情况下,行级锁会升级成表级锁。

  5. 系统调优参数

  6. 升级硬件

  7. 读写分离

  8. 使用缓存

    • mysql内部使用调优参数,缓存。

    • 数据访问层,mybatis、hibernate

  9. 表分区

  10. 垂直拆分

  11. 水平拆分

    • 分库分表

      • 互联网公司可能会比较关心面试者对分库分表的掌握:mysql自带的sharding为什么一般不使用?中间件级别和驱动级别的分库分表,sharding-jdbc,cobar,mycat等开源组件的使用,分布式ID和分库键的选择也备受面试官的青睐。用mysql的主从复制,mycat的读写分离。

  12. 分片原则

  13. NOSQL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值