mysql(一)性能优化

  1. 在配置文件里打开慢查询
    linux环境下的配置文件位于/etc/my.cnf
    windows环境下的配置文件位于 my.ini
    配置 slow_query_log = 1 开启慢查询日志
    slow_query_log_file= 慢查询日志存放地址
    long_query_time=10 慢查询标准

  2. 慢查询分析工具
    mysql自带的分析工具mysqlfumpslow,需要安装perl环境运行
    这个工具可以对日志进行(时间,次数等)排序
    mysql和mysqld是有区别的:
    mysql.exe指的是mysql的客户端,比如登录等。
    mysqld 指mysql的服务端,开启mysql服务。
    3.慢查询优化方法

    1. 硬件的优化(硬盘,内存,cpu等)
    2. 服务器优化(linux服务器比mysql服务器稳定)
    3. sql语句进行优化
    4. 反范式化设计(三大范式)

    参考《阿里java开发手册》,适当冗余,以空间换时间

    1. 索引优化

    mysql索引显式支持b-tree,实际上也支持hash,只是看起来显示的是b-tree,技术上实际上使用的是b+树

  3. 三大范式

    1. 字段不可拆分
    2. 完全依赖
    3. 消除传递依赖
  4. 索引

    索引(Index)是帮助MySQL高效获取数据的数据结构。
    mysql索引包含 普通索引 、唯一索引、符合索引

    主键索引不需要单独创建,主键索引跟唯一索引的区别就是:
    主键索引不能为空,唯一索引可以为null

    执行计划 EXPLAIN(执行计划详细的知识参考ppt)
    查询结果中的key字段表示用到的索引,为null表示没用到索引
    sql是否充分用到了索引,看ken_len字段(百度ken_len的算法)

  5. 索引查询的策略
    全值匹配我最爱,最左前缀要遵守;

    尽量全值匹配,最佳左前缀法则

    带头大哥不能死,中间兄弟不能断;

    最佳左前缀法则,(查询从索引的最左前列开始并且不跳过索引中的列)

    索引列上少计算,范围之后全失效;

    不在索引列上做任何操作,范围条件放最后

    LIKE百分写最右,覆盖索引不写*;

    like左侧写%不能使用索引,尽量使用覆盖索引(只访问索引的查询(索引列和查询列一致)),减少select *

    不等空值还有OR,索引影响要注意;

    OR改UNION效率高

    VARCHAR引号不可丢, SQL优化有诀窍。

  6. 覆盖索引,要查询的列全部都是索引列,只用查索引目录就能找到数据,这种查询叫做覆盖索引

  7. type system>const>eq_rel>rel>range>index>all

  8. 分页也是一种重要的优化方式

  9. 进阶(mycat 分库分表,读写分离,性能瓶颈,b+树,索引失效)

如何写一手好sql

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值