mysql-sql

作者: go_2021 | 来源:发表于2022-02-15 19:12 被阅读0次
  • explain
    分析sql语句的执行情况常用分析字段:

    • key
      用的索引

    • type
      索引的使用类型 大致分为 从上到下排序会靠上性能越好
      system 比较少见,表记录比较少,索引一次命中 主键或者唯一索引 hash
      const eq_ref hash = 直接被查到唯一的数据 直接被查到唯一的数据 b+
      ref range 范围查询在索引上 进行范围查询
      index索引全部扫描
      all 没有用到索引 全表扫描

    • select_type
      代表查询的是否子查询 联合查询
      simple简单查询没有
      primary 子查询 外层
      subQuery 子查询 里层
      union 联合查询

    • extra
      排序和范围查询
      fileSort 文件排序 file temporary临时表 需要优化的没有合理利用索引
      useing where 进行了范围查询
      useing index

    • key_lens
      用到索引的字节长度,一般是越小说明性能越好,因为扫描索引长度小。

    • possible_key
      可能会用到的索引

    • id
      代表一个唯一的一次执行,一个sql子查询或者join查询会分为几次执行。
      id从大到小优先执行。
      https://mp.weixin.qq.com/s/yPA8v5qTMatlw3LCY-orSQ
      http://www.cnitblog.com/aliyiyi08/archive/2008/09/09/48878.html

  • Optimizer_trace

  • icp(index condition pushdown)

    • 5.6之后支持,ab字段联合索引。
      where中 b<5 and b>1 and c >5 and d!='d',之前只能在联合索引中过滤出b条件数据,icp之后b和a的过滤条件都可以在联合索引中实现。
  • 索引失效

    • 比如varchar字段a一下情况索引都会失效:
      where a = 1 || a + 1 = 1 || a like "%a" || length(a) = 10
    • a or b,b没有索引。
    • a in (1,2) 可以换成 union。
    • orderby和where不一致。
    • 联合索引,abc,用到a就可以。
    • join字段类型长度一致。
  • 索引(use index.ignore index.force index)

  • 单表操作

    • tk.mybatis mybatisplus支持 不用写xml sql
    • 好迁移 其他数据库。
    • 一般业务的压力都是再db,db的资源最为重要了,减少压力,尽量java来处理
  • 避免使用 select *,列出需要查询的字段

    • 增加mysql解析的开销 先查这个表有哪些字段。
    • 不能利用索引 如果只差一列 name并且有索引 可以select name 减少io次数。
    • 增加了网络 传输开销。
  • 分页查询优化 加where id > 10000条件 下一页 记录上一页的页数。

  • TRUNCATE
    concat(TRUNCATE(ord.app_rate/100, 2),'%') AS excelRate1 当app_rate为null时 返回就是null

  • mysql 用union 链接两部分数据 显示错误


    解决方案:
    两段的select 字段顺序不一样。。
  • id in() 最多1000个

  • join left b表 on 后面只加 关联条件 其他的过滤放到where里

  • timestamp字段 可以在实现updatetime 和createTime
    https://www.cnblogs.com/panxuejun/p/6134993.html
    只能一个timestamp字段。。

  • update 字段要用,隔开,用and隔开语法不报错
    UPDATE bz_order.t_order SET order_channel = 62 , agent_user_id = 1642457 , channel_no = 'daxiangplat'
    WHERE order_id IN ('202011281501361402','202011281515532412','202011281519182413','202011281527452416','202011281534411407','202011281543511412');
    多个update 字段要用,隔开,用and隔开语法不报错 但是执行后会字段值 会出错

  • IF的用法

SELECT * FROM ae_agent_cust WHERE IF
    (
            DATE_FORMAT( birthday, '%m-%d' ) >= DATE_FORMAT( now( ), '%m-%d' ),
            DATE_FORMAT( birthday, '2020-%m-%d' ) >= DATE_FORMAT( now( ), '%Y-%m-%d' )
                AND DATE_FORMAT( birthday, '2020-%m-%d' ) <= '2021-01-05',
            DATE_FORMAT( birthday, '2021-%m-%d' ) >= DATE_FORMAT( now( ), '%Y-%m-%d' )
                AND DATE_FORMAT( birthday, '2021-%m-%d' ) <= '2021-01-05'
    ) AND agent_user_id = 1576768 ORDER BY birthday;
  • 字符串链接需要用concat
  • orderby + limit 在orderby字段有相同值的记录会随机排序 建议orderby a,id
    https://mp.weixin.qq.com/s/JQgDEzxUBsq8UXiGwrEc0A
  • 是需要判断是否有数据 可以用limit 1 不用count (*)
    https://mp.weixin.qq.com/s/ZQOTKXw3dexVH9v5y6BLpA
    count()=count(1)>count(id)
    count(a)如果有索引那和
    1一样,没索引排最后。
  • join
    的内连接、左连接、右连接有什么区别?
    内连接关键字:inner join;左连接:left join;右连接:right join
    内连接是把匹配的关联数据显示出来;
    左连接是左边的表全部显示出来,右边的表显示出符合条件的数据;
    右连接正好相反。
    inner join不一定小表驱动大表。比如a.bid = b.id,a表bid没有索引。STRAIGHT_JOIN强行以左表为驱动。
    left join一般是左边驱动右表,但是where中有右表条件可能会优化为inner join
    join_buffer_size默认256k,可以提高这个,提高效率。
    join_buffer存储的是指定的字段值不是全量。

相关文章

  • MySQL-SQL基础应用+Infomation_Schema介

    MySQL-SQL基础应用+Infomation_Schema介绍-Day3 1、SQL 介绍 2、SQL 作用 ...

  • mysql-sql

    explain分析sql语句的执行情况常用分析字段:key用的索引type索引的使用类型 大致分为 从上到下排序会...

  • mysql基本语法

    mysql-sql 语句 字符集选utf-8 我需要学增删改查, 事物, 联合 启动数据库 mysql -u ro...

  • mysql-SQL基础

    sql在线练习网站 http://sqlzoo.net/wiki/SELECT_basics/zh在线sql教程h...

  • MySQL-SQL语句

    [TOC] 第一章:MySQL介绍 1.1-什么是SQL Structured Query Language 结构...

  • Mysql-Sql练习

    Sql练习题 1.表和数据的准备 员工表 部门表 工资等级表 2.练习题目 查询出部门编号为30的所有员工的编号和...

  • MySQL-SQL优化

    前言 在应用开发的早期,数据量少,开发人员开发功能时更重视功能上的实现,随着生产数据的增长,很多SQL语句开始暴露...

  • MySQL-SQL优化

    前置文章:一、MySQL-Explain了解查询语句执行计划[https://www.jianshu.com/p/...

  • Mysql-sql基础语法

    基础概念 并不直接访问数据库;你使用的是DBMS,它替你访问数据库 模式(schema)与表( table) 的区...

  • MySQL-SQL基础应用

    如果您对数据库感兴趣,可以添加 DBA解决方案QQ群:855439640 1、SQL介绍 2、常用SQL分类 SQ...

网友评论

    本文标题:mysql-sql

    本文链接:https://www.haomeiwen.com/subject/eovukrtx.html