当前位置: 首页 > article >正文

SQL优化笔记--explain看执行计划--主要还是看用了哪些索引,所以你是否失效--分库分表的注意事项(未完)

1.优化的是查询,没有说增删改,缓存也是在提高查询速度

2.数据库层面(因为还有硬件层面,缓存层面,先不聊) 的查询速度 的提升== 成本低 性价比高 

3. bug不是你写的,但可以是你解决的

4.sql优化怎么定位sql语句 ?通过慢日志(slow log),抓超时的sql语句,再分析,然后加索引

5.定位

show VARIABLES like 'slow_query%';

"slow log"通常指的是数据库中的慢查询日志,它记录了执行时间超过一定阈值的数据库操作,这些操作可能是查询、更新或其他数据库命令。慢日志对于数据库性能优化非常重要,因为它可以帮助数据库管理员或开发人员识别和解决性能问题。

  1. 查看慢日志:不同的数据库系统提供了不同的方法来查看慢日志。例如,在MySQL中,可以通过设置slow_query_log参数来启用慢查询日志,并使用slow_query_log_file参数指定日志文件的路径。在Navicat等数据库管理工具中,也可以通过界面来查看和分析慢日志。

  2. 要查看MySQL的慢查询日志,可以按照以下步骤进行操作:

    1. 确认慢查询日志是否开启

    可以通过执行以下命令来查看慢查询日志的状态:

    SHOW VARIABLES LIKE 'slow_query_log';

    如果返回结果中的ValueON,则表示慢查询日志已经开启;如果为OFF,则需要先开启慢查询日志。

    2. 开启慢查询日志(如果尚未开启)

    可以通过修改MySQL的配置文件(通常是my.cnfmy.ini)来开启慢查询日志。在配置文件的[mysqld]部分添加或修改以下参数:

    slow_query_log = 1
    slow_query_log_file = /path/to/slow-query.log
    long_query_time = 2

    其中,slow_query_log设置为1表示开启慢查询日志,slow_query_log_file指定了慢查询日志文件的路径,long_query_time定义了查询执行时间的阈值(单位为秒),超过该时间的查询将被记录到慢查询日志中。

    3. 查看慢查询日志文件

    慢查询日志是以文本形式存储的,可以直接使用文本编辑器打开慢查询日志文件进行查看。日志文件的路径在配置文件中通过slow_query_log_file参数指定。

    4. 使用mysqldumpslow工具分析慢查询日志(可选)

    如果慢查询日志文件内容较多,可以使用mysqldumpslow工具对日志进行分析。该工具可以对慢查询日志进行排序、汇总,以便更容易找到执行时间较长的查询。例如,执行以下命令可以显示执行时间最长的10条查询:

    mysqldumpslow -s t -t 10 /path/to/slow-query.log

    其中,-s t表示按照查询时间进行排序,-t 10表示显示前10条记录。

6.分析

  1. 分析慢日志:分析慢日志时,通常需要关注以下几个方面:

    • 查询的执行时间
    • 扫描的行数
    • 是否使用了索引
    • 查询的类型(例如SELECT、UPDATE等)
  2. 看执行计划,优化器自己生成的执行计划
  3. 数据量到达什么情况需要考虑分库分表(开销很大)?
    • 数据量大于2G以上,--看数据库表文件,如果ibd文件2G以上,单表500万以上 ,就需要分库分表,这个是阿里巴巴的内部规定,所以这是个建议值
  4. 查询语句的优化
  5. 数据库的三大范式:范式就是规范
    • 为什么遵循三范式?
      • 能让数据(表)的存储空间占用率最小,利用率最高,用最小的存储表达最多的业务
      • 第一范式:列不可再分
        • 举例:收件人的地址可以拆分为“省”,“市”,“区”,等等到“门牌号
      • 第二范式:表不可再分
        • 一个表只说一个资源,只表达一个业务模型,也就是一个名词对应一张表
      • 第三范式:消除数据冗余
        • 消除重复字段
        • 当一个字段经常被展示,且还要联表查询,可以适当冗余,一般都是核心业务表会冗余,最大的问题是 修改这个字段时要保证数据的一致性,修改的时候要同步维护,(占用存储空间,修改效率低)
      • 建表7字段:就是一个业务表应该有的字段,
    • sql语句的质量
      • 子句的执行顺序
      • 小表驱动大表(笛卡尔积降量)
  6. explain分析

7.调优

        1.索引 

                定义:索引是一种数据结构,目的是提升查询速度,原理是降低查询的遍历次数,查询次数可以用关键字explain看到,索引的本质是排序

                        

                1.为什么选树作为索引的核心结构?

                              

                2.索引的结构和选择的存储引擎有关系。为什么?

                3. MySQL 索引结构 支持hash(innoDB)和b+tree(memery) 

                          1.hash :精确查询速度快,范围查询慢(比如查找年龄大于10的)

                          2.b+tree:  范围查询快(可以推出)B+tree联合查询看这个​​​​​​​

                4.索引类型:单值 ,唯一 ,主键,复合

                5.建立索引就是


http://www.kler.cn/a/411657.html

相关文章:

  • CKA认证 | Day4 K8s管理应用生命周期(下)
  • Elasticsearch:Retrievers 介绍
  • Selenium 自动化测试demo
  • Jupyter Notebook的安装和配置提示功能
  • DAY133权限提升-Windows权限提升篇溢出漏洞土豆家族通杀全系补丁对比EXP筛选
  • Java【多线程】(1)进程与线程
  • C#中面试的常见问题008
  • 列表代码思路
  • 前端技术选型之uniapp
  • MySQL中char和varchar的区别详解
  • JavaWeb——请求响应(5/8)-请求:日期参数json参数(使用场景及封装类型、接收方式、在 Postman 中传递、在服务端接收)
  • Spring框架使用xml方式配置ThreadPoolTaskExecutor线程池,并且自定义线程工厂
  • jdk17-LongAddr 类increment()方法注释说明
  • c++中的lambda表达式!
  • 【H2O2|全栈】JS进阶知识(十一)axios入门
  • ChatGPT如何辅助academic writing?
  • 学习路之linux--多php版本下指定php版本执行命令
  • 基于Java Springboot华为数码商城交易平台
  • 数据结构初阶---复杂度
  • 大模型的实践应用31-基于通义千问大模型改进台风和海浪预测研究,利用机器学习与通义千问结合的思路实现对台风和海浪预测分析
  • Mongo数据库 --- Mongo Pipeline
  • 量子安全与经典密码学:一些现实方面的讨论
  • 分布式在线评测系统
  • 【机器视觉 OCR】适合Python开发的OCR工具:深入解析与实战应用
  • Python学习34天
  • 在Unity中实现物体动画的完整流程