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

sql的性能分析

  • 慢查询日志:通过慢查询日志需要优化的sql语句。

    • 慢查询日志记录了所有执行时间超过指定参数的所有sql语句。

    • 开启慢日志查询开关:show_query_log=1

    • 设置慢查询日志的时间:long_query_time=?。

    • show variables like ‘slow_query_log’;查看慢查询日志是否开启。

    • 慢查询开启之后会在本地身材个好难过localhost-show.log文件

  • profile详情:可以再做sql优化的时候帮助我们了解时间都耗费到哪里了通过have_profiling来查看是否支持

    • profile帮我们解决了在使用慢查询日志的时候,一些简单的sql语句压秒结束的操作,让我们能够进行优化操作。

      select  @@have_profiling    //查看是否支持profile
      select @@profiling          //查看是否打开。
      set profiling = 1           //将其进行打开
      ​
      show profiles               //打开profile之后展示在当前操作下sql语句的执行时间。
      show profile for query 【字段id】   //查看sql语句各个阶段的耗时时间。
      show profile cpu for query 【id】     //查看指定id的sql语句cpu的使用情况。
  • explain:查看当前语句的执行计划,只需要在sql语句前面加上即可。

    • explain各个字段:

      • id: 表示查询的顺序,其中的id越大,执行的优先级也就越大,同样的id通过从上到下的顺序来进行执行。

      • select_type:知识说明查询的类型

        • 常见的取值有simple,primary,union,subouery。

      • type:表示连接类型,性能由号道岔的连接类型为Null,system,const,eq_ref,ref,range,index,all。

      • possible_key:显示可能用到的索引

      • key:实际用到的索引

      • key_len:表示索引当中没奶奶个的单子结束,该值为索引字段的最大可能长度

      • rows:mysql认为需要执行的查询行数,这是一个估计值。

      • filtered:表示返回结果所占读取行数的百分比,filtered的值越大越好。

      • extra:前文没有显示出来的东西会在extra里面显示出来。

  • 索引的使用:

    • 最左前缀法则:表中的最左侧的字段必须存在,查询从索引的最左列开始,并且不跳过索引中的列,如果跳过,索引将部分失效(后面的字段索引失效)。

    • 范围查询:联合索引当中,出现范围查询(加上等号不会失效),其右边的字段的索引将会失效。

    • 索引列的任何计算都会失效,性能降低!!

    • 字符串类型的字段如果不加引号,索引会失效。

    • 模糊查询:如果是尾部进行查询,索引不会失效,如果是头部模糊那么索引就会失效。

    • or连接的条件,如果or连接的字段有一方没有索引,那么全部索引都会失效。

    • 数据分布影响:如果mysql执行sql语句的时候评估全表扫描比索引查找效率更高,那么就会走全表扫描。

    • sql提示:在sql语句当中加入一些人为的提示来达到优化操作的目的。

    • select * from table use index(索引名) where 条件。            建议使用某一个索引
      select * from table  ignore index(索引名) where 条件。        忽略某一个索引
      select * from table force index(索引名) where 条件。          强制使用某一个索引
    • 覆盖索引:查询使用了索引,并且返回需要的列,在该索引当中已经全部找到,减少select *的使用。

      • using index condition 查找使用了所以呢,但是需要返回表查询数据
        using where using index 查找使用了索引,但是需要的数据都在索引列当中都能找到,所以不需要会标查询数据
      • 覆盖索引就是说明在sql语句查询的时候,不需要再次回表,只需要在二级索引下就能够找到语句需要返回的字段,这就是所谓的覆盖索引

    • 前缀索引:当字段类型为字符串的时候,设置索引就会很长,索引,我们可以使用前缀索引,取得字符串的前n个字段来提高索引的效率。前缀的长度是选择性的,索引选择性索引值和数据表中的记录总数的比值,索引选择性越高,那么查询的效率也就越高。

      - create  index index_name on table(column(n))  根据 column的前n个字符来创建索引,
      - select count(distinct substring(column,1,n)) from table       查看选取字段所占的比值。
  • 索引的设计原则:

    • 针对数量非常大的,查询比较频繁的。

    • 针对查询条件,排序,分组操作的字段建立索引。

    • 尽量选择区分度高的列作为索引,尽量建立唯一索引。

    • 对于字符串类型的字段,字段的长度较长,可以针对于字段的特点,简历前缀索引。

    • 尽量使用联合索引,减少单列索引,查询时联合索引很多时可以覆盖索引,节省空间。

    • 要控制索引数量,索引并不是越多越好,维护索引结构的代价也会越来越大。

    • 如果索引不能存null值,请在穿件表示使用not null约束它。

http://www.xdnf.cn/news/5322.html

相关文章:

  • Linux | Uboot-Logo 修改文档(第十七天)
  • 【通讯录教程】如何将号码快速导入手机通讯录,支持苹果和安卓手机,一次性导入大量号码进入手机通讯录,基于WPF的解决方案
  • C语言中#include引用头文件的尖括号和双引号的区别
  • 情书大全v3.0.1
  • 【网络分析工具】网络工具wireshark、TCPdump、iperf使用详解
  • 招行数字金融挑战赛数据分析赛带赛题二
  • CSS Layer 详解
  • SAP学习笔记 - 开发08 - Eclipse连接到 BTP Cockpit实例
  • 20242817-李臻-课下作业:Qt和Sqlite
  • 【vue】计算属性和属性传值以及监听属性
  • 【数据结构】线性表
  • Linux 常用命令集合
  • 开源字体设计工具字玩 FontPlayer
  • 【Bluedroid】HID DEVICE 连接的源码分析
  • MIT XV6 - 1.5 Lab: Xv6 and Unix utilities - xargs
  • Qt—多线程基础
  • 医药研发加速器!AI如何助力新药问世?
  • Unity中AssetBundle使用整理(一)
  • 模型过拟合是什么?
  • 【东枫科技】使用LabVIEW进行NVIDIA CUDA GPU 开发
  • AI智慧公园管理方案:用科技重塑市民的“夜游体验”
  • 【C++】内存管理 —— new 和 delete
  • Lora原理及实现浅析
  • 【C++】特殊类设计
  • 支持向量机与逻辑回归的区别及 SVM 在图像分类中的应用
  • matlab中的积分函数
  • 【Java学习日记34】:this关键字和成员变量
  • armv7 backtrace
  • LoRA(Low-Rank Adaptation)原理详解
  • 【ajax基础】