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

发布了15 篇原创文章 · 获赞 0 · 访问量 234

猜你喜欢

转载自blog.csdn.net/weixin_43513459/article/details/104956281
今日推荐