精华内容
下载资源
问答
  • sql执行效率
    千次阅读
    2020-11-25 15:05:53

    **介绍:**可以通过配置sql执行效率插件来得出每个sql的执行效率
    该插件使用前 需要将环境改为dev(开发环境)或者test(测试环境)
    步骤
    1.注入sql执行效率插件

    //Sql执行效率插件
        @Bean
        @Profile({"dev","test"}) //设置dev test 环境开启,保证我们的效率
        public PerformanceInterceptor performanceInterceptor(){
            PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
            performanceInterceptor.setMaxTime(1); //ms 设置sql执行的最大时间 如果超过则不执行
            performanceInterceptor.setFormat(true);//是否格式化代码
            return performanceInterceptor;
        }
    

    2.在properties/yml文件内进行环境设置

    #设置开发环境
    spring.profiles.active=dev
    
    

    3.进行测试
    测试图样
    只要超过设置的时间 就会报错 执行不了。

    更多相关内容
  • SQL执行效率和性能测试方法

    千次阅读 2021-08-07 03:07:10
    对于做管理系统和分析系统的程序员,复杂SQL语句是不可避免的,面对海量数据,有时候经过优化的某一条语句,可以提高执行效率和整体运行性能。如何选择SQL语句,本文提供了两种方法,分别对多条SQL进行量化的分析。...

    对于做管理系统和分析系统的程序员,复杂SQL语句是不可避免的,面对海量数据,有时候经过优化的某一条语句,可以提高执行效率和整体运行性能。如何选择SQL语句,本文提供了两种方法,分别对多条SQL进行量化的分析。

    在测试SQL性能的过程中。

    一是通过设置STATISTICS查看执行SQL时的系统情况。选项有PROFILE,IO ,TIME。

    SET STATISTICS PROFILE ON:显示分析、编译和执行查询所需的时间(以毫秒为单位)。

    SET STATISTICS IO ON:报告与语句内引用的每个表的扫描数、逻辑读取数(在高速缓存中访问的页数)和物理读取数(访问磁盘的次数)有关的信息。

    SET STATISTICS TIME ON:显示每个查询执行后的结果集,代表查询执行的配置文件。

    实例如下:

    SET STATISTICS PROFILE ON

    SET STATISTICS IO ON

    SET STATISTICS TIME ON

    GO

    --你的SQL脚本开始

    select top 100 * from TBL_Cot_RecStaticList

    --你的SQL脚本结束

    GO

    SET STATISTICS PROFILE OFF

    SET STATISTICS IO OFF

    SET STATISTICS TIME OFF

    显示信息:

    SQL Server 分析和编译时间:

    CPU 时间 = 0 毫秒,占用时间 = 59 毫秒。

    (100 行受影响)

    表 'TBL_Cot_RecStaticList'。扫描计数 1,逻辑读取 14 次,物理读取 2 次,预读 992 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

    SQL Server 执行时间: CPU 时间 = 0 毫秒,占用时间 = 306 毫秒。

    SQL Server 分析和编译时间: CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

    SQL Server 执行时间: CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

    SQL Server 执行时间: CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

    另外,也可以通过手工添加语句,计算执行时间来查看执行语句花费了的时间,以判断该条SQL语句的效率如何:

    declare @d datetime

    set @d=getdate()

    --你的SQL脚本开始

    SELECT [TestCase] FROM [TestCaseSelect]

    --你的SQL脚本结束

    select [语句执行花费时间(毫秒)]=datediff(ms,@d,getdate())

    二是通过SQL 2008的“查询”按钮下的“包括实际的执行计划”和“包括客户端统计信息”。

    454c9cd6fe960a1c7d4baa702656f554.png

    03ffc39d9c7a53d553af2ea1562c9025.png

    下面是我和经理写的两个例子的性能对比:

    我的:

    7395133995479d8f359b98c9c0c44ff9.png

    SQL Server 执行时间:

    CPU 时间= 32 毫秒,占用时间= 762 毫秒。

    CPU 时间= 16 毫秒,占用时间= 475 毫秒。

    CPU 时间= 32 毫秒,占用时间= 671 毫秒。

    CPU 时间= 31 毫秒,占用时间= 615 毫秒。

    经理的:

    bbfc9e345d72214d2d0898abf122d822.png

    SQL Server 执行时间:

    CPU 时间= 16 毫秒,占用时间= 547 毫秒。

    CPU 时间= 47 毫秒,占用时间= 491 毫秒。

    CPU 时间= 32 毫秒,占用时间= 436 毫秒。

    CPU 时间= 47 毫秒,占用时间= 416 毫秒。

    PS:今天在做一道题目的时候,经理给出的一道难题,虽然做出来了,但是性能没有做到最优化。其中用到了三层嵌套。现在特别是要总结的:大表跟小表进行关联查询 时,涉及到嵌套查询,先查询小表,然后再联合大表。我是一开始让大小表进行关联,然后再嵌套。而经理写的是先让小表嵌套,最后在关联。这样,执行效率自然要比我高

    SQL执行效率和性能测试方法总结

    对于做管理系统和分析系统的程序员,复杂SQL语句是不可避免的,面对海量数据,有时候经过优化的某一条语句,可以提高执行效率和整体运行性能.如何选择SQL语句,本文提供了两种方法,分别对多条SQL进行量化 ...

    [转]SQLServer SQL执行效率和性能测试方法总结

    本文转自:http://www.zhixing123.cn/net/27495.html 对于做管理系统和分析系统的程序员,复杂SQL语句是不可避免的,面对海量数据,有时候经过优化的某一条语句,可以提 ...

    SQl 执行效率总结

    SQL执行效率总结 1.关于SQL查询效率,100w数据,查询只要1秒,与您分享: 机器情况 p4: 2.4 内存: 1 G os: windows 2003 数据库: ms sql server 2 ...

    怎么优化JAVA程序的执行效率和性能?

    现在java程序已经够快的了,不过有时写出了的程序效率就不怎么样,很多细节值得我们注意,比如使用StringBuffer或者StringBuilder来拼接或者操作字符串就比直接使用String效率高 ...

    in和exists的区别与SQL执行效率

    in和exists的区别与SQL执行效率最近很多论坛又开始讨论in和exists的区别与SQL执行效率的问题,本文特整理一些in和exists的区别与SQL执行效率分析 SQL中in可以分为三类: 1 ...

    in和exists的区别与SQL执行效率分析

    可总结为:当子查询表比主查询表大时,用Exists:当子查询表比主查询表小时,用in SQL中in可以分为三类: 1.形如select * from t1 where f1 in ('a','b'), ...

    SQL执行效率总结

    1.关于SQL查询效率,100w数据,查询只要1秒,与您分享: 机器情况 p4: 2.4 内存: 1 G os: windows 2003 数据库: ms sql server 2000 目的: 查询 ...

    SQL执行效率2-执行计划

    以下语句可以进行SQL 语句执行时间分析,两个Go之间就是SQL查询语句 use Work--数据库名 go set statistics profile on set statistics io o ...

    提高SQL执行效率的16种方法

    项目中优化sql语句执行效率的方法:1)尽量选择较小的列2)将where中用的比较频繁的字段建立索引3)select子句中避免使用'*'4)避免在索引列上使用计算.not in 和<> ...

    随机推荐

    &lbrack;WPF&rsqb;DataGridHyperlinkColumn网址过长TextTrimming无效

    windows下的socket网络编程

    windows下的socket网络编程 windows下的socket网络编程 clinet.c 客户端 server.c 服务器端 UDP通信的实现 代码如下 已经很久没有在windows下编程了, ...

    Linux主流發行版本介紹

    一.简介 而工欲善其事,必先利其器,Linux的世界相當廣大,除了最著名的Ubuntu以外還有不少發行版.然文人相輕,自古皆然,了解不同發行版的優勢不只嘴上攻防用的上,也是學Linux一個有趣的地方! ...

    &lbrack;转载&rsqb;关于CSDN&comma; cnblog&comma; iteye和51cto四个博客网站的比较与分析

    CSDN:http://blog.csdn.net/ cnblog: http://www.cnblogs.com/ iteye: http://www.iteye.com/blogs/ 51cto: ...

    浅谈Javascript 数组与字典

    Javascript 的数组Array,既是一个数组,也是一个字典(Dictionary). 先举例看看数组的用法. var a = new Array();  a[0] = "Acer&q ...

    Android NFC标签 开发深度解析 触碰的艺术

    有几天没有更新博客了,不过本篇却准备了许久,希望能带给每一位开发者最简单高效的学习方式.废话到此为止,下面开始正文. NFC(Near Field Communication,近场通信)是一种数据传输 ...

    Windows Azure 社区新闻综述(&num;70 版)

    欢迎查看最新版本的每周综述,其中包含有关云计算和 Windows Azure 的社区推动新闻.内容和对话. 以下是过去一周基于您的反馈汇集在一起的内容: 文章.视频和博客文章 ·   如何选择 No ...

    &lbrack;Python&rsqb;程序性能分析

    有些脚本发现比预期要慢的多,就需要找到瓶颈,然后做相应的优化,参考A guide to analyzing Python performance,也可以说是翻译. 指标 运行时间 时间瓶颈 内存使用 ...

    基于开发者中心DevOps流水线快速上云

    导读:“DevOps”这个词现在很流行,它具体指的是什么呢?本文介绍了DevOps和开发者中心DevOps流水线,图文并茂,解答您的疑惑. 那么DevOps是什么?开发者中心

    30 个java编程技巧

    1.return 一个空的集合,而不是 null 如果一个程序返回一个没有任何值的集合,请确保一个空集合返回,而不是空元素.这样你就不用去写一大堆 ”if else” 判断null元素. Java 的 ...

    展开全文
  • 为提高oracle的sql执行效率,优化性能,通过oracle表分析功能进行调整,能加快sql查询效率2倍以上
  • 对于做管理系统和分析系统的程序员,复杂SQL语句是不可避免的,面对海量数据,有时候经过优化的某一条语句,可以提高执行效率和整体运行性能。 如何选择SQL语句,本文提供了两种方法,分别对多条SQL进行量化的分析...

    对于做管理系统和分析系统的程序员,复杂SQL语句是不可避免的,面对海量数据,有时候经过优化的某一条语句,可以提高执行效率和整体运行性能。

    如何选择SQL语句,本文提供了两种方法,分别对多条SQL进行量化的分析。

    在测试SQL性能的过程中。

    一是通过设置STATISTICS查看执行SQL时的系统情况。

    选项有PROFILE,IO ,TIME。 SET STATISTICS PROFILE ON:显示分析、编译和执行查询所需的时间(以毫秒为单位)。

    SET STATISTICS IO ON:报告与语句内引用的每个表的扫描数、逻辑读取数(在高速缓存中访问的页数)和物理读取数(访问磁盘的次数)有关的信息。

    SET STATISTICS TIME ON:显示每个查询执行后的结果集,代表查询执行的配置文件。

    实例如下:

    SET STATISTICS PROFILE ON

    SET STATISTICS IO ON

    SET STATISTICS TIME ON

    GO

    –你的SQL脚本开始

    SELECT [TestCase] FROM [TestCaseSelect]

    –你的SQL脚本结束

    GO

    SET STATISTICS PROFILE OFF

    SET STATISTICS IO OFF

    SET STATISTICS TIME OFF

     

    另外,也可以通过手工添加语句,计算执行时间来查看执行语句花费了的时间,以判断该条SQL语句的效率如何:

    declare @d datetime set @d=getdate()

    –你的SQL脚本开始

    SELECT [TestCase] FROM [TestCaseSelect]

    –你的SQL脚本结束

    select [语句执行花费时间(毫秒)]=datediff(ms,@d,getdate())

     

    二是通过SQL 2008的“查询”按钮下的“包括实际的执行计划”和“包括客户端统计信息”。

    下面是我和经理写的两个例子的性能对比:

    我的: 

    SQL Server 执行时间:

    CPU 时间= 32 毫秒,占用时间= 762 毫秒。

    CPU 时间= 16 毫秒,占用时间= 475 毫秒。

    CPU 时间= 32 毫秒,占用时间= 671 毫秒。

    CPU 时间= 31 毫秒,占用时间= 615 毫秒。

    经理的: 

    SQL Server 执行时间:

    CPU 时间= 16 毫秒,占用时间= 547 毫秒。

    CPU 时间= 47 毫秒,占用时间= 491 毫秒。

    CPU 时间= 32 毫秒,占用时间= 436 毫秒。

    CPU 时间= 47 毫秒,占用时间= 416 毫秒。

    PS:今天在做一道题目的时候,经理给出的一道难题,虽然做出来了,但是性能没有做到最优化。

    其中用到了三层嵌套。

    现在特别是要总结的:大表跟小表进行关联查询 时,涉及到嵌套查询,先查询小表,然后再联合大表。

    我是一开始让大小表进行关联,然后再嵌套。而经理写的是先让小表嵌套,最后在关联。这样,执行效率自然要比我高

     

    #1楼[楼主]   

    DBCC FREEPROCCACHE
    DBCC DROPCLEANBUFFERS


    DBCC DROPCLEANBUFFERS:从缓冲池中删除所有缓存,清除缓冲区

    在进行测试时,使用这个命令可以从SQLSERVER的数据缓存data cache(buffer)清除所有的测试数据,以保证测试的公正性。

    展开全文
  • 【0】如何分析mysql中sql执行较慢的问题 步骤1、观察,至少跑一天,看看生产的慢sql情况; 步骤2、开启慢查询日志,设置阈值,比如超过5秒钟就是慢sql, 并将它抓取出来; 步骤3、explain+慢sql分析; 步骤4、...

    【0】如何分析mysql中sql执行较慢的问题

    • 步骤1、观察,至少跑一天,看看生产的慢sql情况;
    • 步骤2、开启慢查询日志,设置阈值,比如超过5秒钟就是慢sql, 并将它抓取出来;
    • 步骤3、explain+慢sql分析;
    • 步骤4、show profile;(推荐)
    • 步骤5、运维经理或dba,进行sql数据库服务器的参数调优;(不推荐)

    【总结】 

    • 总结1、慢查询的开启并捕获;
    • 总结2、explain + 慢sql分析;
    • 总结3、show profile 查询sql在mysql 服务器里面的执行细节和声明周期情况;
    • 总结4、sql数据库服务器的参数调优;

    ==============================================================================================

    【1】exists + order by + group by 优化 

    1.1、查询优化:使用 explain 查看执行计划,看是否可以基于索引查询;

    1.2、小表驱动大表:当两个表做连接操作时, 其实就是双层for循环, 小表驱动大表的意思是, 小表(小数据集的表)放在第1层循环,大表(大数据集的表)放在第2层循环;

    【补充】关于exists 语法 与 in 的区别:

    exists语法:把 where id in 换位 where  exists 即可;

    select ... from tbl where exists (subquery);

    exists语法可以理解为:将主查询的数据,放到子查询中做条件验证,根据验证结果 true 或 false, 来决定主查询的数据结果是否保留;
    关于exists的提示:

    • 提示1:exists(subquery) 只返回true或false, 因此子查询中的select * 也可以是 select 1 或其他, 官方说法是实际执行时会忽略 select 清单,因此没有区别;
    • 提示2:exists 子查询的实际执行过程可能经过了优化而不是我们理解上的逐条对比,如果担心效率问题,可以进行实际检验;
    • 提示3:exists 子查询往往也可以用条件表达式,其他子查询或join来替代,哪种方法最优需要具体问题具体分析;

    exists用法荔枝(exists与in的区别):

    -- exists 语法 
    select * from emp_tbl a where exists (select 1 from dept_tbl b where b.dept_id = a.dept_id)
    order by a.rcrd_id 
    limit 10
    ;
    -- in 语法
    select * from emp_tbl a where a.dept_id in (select b.dept_id from dept_tbl b)
    order by a.rcrd_id 
    limit 10
    ;
    

    -- 执行计划18
    explain  select * from emp_tbl a where exists (select 1 from dept_tbl b where b.dept_id = a.dept_id)
    ;
    -- 执行计划19
    explain select * from emp_tbl a where a.dept_id in (select b.dept_id from dept_tbl b)
    ;

    ==============================================================================================

    1.2、order by 关键字优化 
    优化1、尽量使用index方式排序,避免使用 filesort方式;

    -- 建表
    drop table if exists birth_tbl;
    create table birth_tbl (
        `rcrd_id` int(10) unsigned primary key auto_increment COMMENT '记录编号'
        , age int default 0 comment '年龄'
        , birth timestamp default current_timestamp comment '生日'
    ) engine=innodb default charset=utf8 comment '生日表'
    ;
    -- 插入数据
    insert into birth_tbl(age) values 
    (floor(1+(rand()*100)))
    , (floor(1+(rand()*100)))
    , (floor(1+(rand()*100)))
    , (floor(1+(rand()*100)))
    , (floor(1+(rand()*100)))
    ;
    -- 添加索引
    alter table birth_tbl
    add key `idx_age_birth`(`age`, `birth`)
    ; 

    -- 查看order by的执行计划是否使用了文件排序; 

    -- 执行计划20  索引排序
    explain select * from birth_tbl where age > 30 order by age
    ;
    -- 执行计划21  索引排序
    explain select * from birth_tbl where age > 30 order by age, birth
    ;
    -- 执行计划22  文件排序
    explain select * from birth_tbl where age > 30 order by birth
    ;
    -- 执行计划23  文件排序
    explain select * from birth_tbl where age > 30 order by birth, age
    ;
    -- 执行计划24  文件排序
    explain select * from birth_tbl order by birth
    ;
    -- 执行计划25  文件排序
    explain select * from birth_tbl where birth > '2018-01-01 00:00:00' order by birth
    ;
    -- 执行计划26  索引排序
    explain select * from birth_tbl where birth > '2018-01-01 00:00:00' order by age
    ;
    -- 执行计划27  文件排序
    explain select * from birth_tbl order by age asc, birth desc
    ;

    mysql支持两种方式的排序: 文件排序filesort 和 index 索引排序, index排序的效率较高; 它指mysql 扫描索引本身完成排序,文件排序filesort 效率较低;

    【补充】 order by 满足两个情况:会使用索引排序:

    • 情况1:order by 语句使用索引最左前列;
    • 情况2: 使用where子句与order by 子句条件组合满足索引最左前列;

    优化2、尽可能在索引列上完成排序操作,遵照索引建的最佳左前缀;

    优化3、如果不在索引列上,文件排序filesort有两种算法: mysql需要启动双路排序或单路排序;

    优化策略:

    • 策略1:增大 sort_buffer_size 参数设置;
    • 策略2:增大 max_length_for_sort_data 参数的设置;
    • 策略3:why ?

    【总结】order by 总结-为排序使用索引:

    • 总结1、mysql两种排序方式: 文件排序或扫描有序索引排序;
    • 总结2、mysql能为排序和查询使用相同的索引;
    • 总结3、具体执行计划:

    key idx_a_b_c(a, b, c);

    • 总结3.1、order by 能使用索引最左前缀的有:
    • order by a;
      order by a, b;
      order by a, b, c;
      order by a desc, b desc, c desc;  -- (要么全部升序,要么全部降序)
    •  
    • 总结3.2、如果where 使用索引的最左前缀定义为常量, 则order by 能使用索引;
    • where a = const order by b, c;
      where a=const and b=const order by c;
      where a = const and b > const order by b, c;
    •  
    • 总结3.3、不能使用索引进行排序:
    • order by a asc, b desc, c desc;
      where g = const order by b, c;
      where a = const order by c;
      where a=const order by a, d -- d不是索引的一部分;
      where a in (...) order by b, c;

    1.3、group by 关键字优化;(均和order by 一样)

    • (1)group by 实质是先排序后再分组,遵照索引建的最佳左前缀;
    • (2)当无法使用索引列,增大 max_length_for_sort_data 参数的设置+增大 sort_buffer_size 参数的设置;
    • (3)where高于 having, 能写在 where 限定的条件就不要去 having 限定了 ;

    =============================================================================================

    【2】慢查询日志

    0、什么是慢查询sql:sql运行时间超过 long_query_time 的sql 将会被记录到 慢查询日志中;

    • 0.1)mysql的慢查询日志是mysql提供的一种日志记录, 它用来记录在mysql中响应时间超过阈值的语句,具体指运行时间超过 long_query_time 值的sql, 则会被记录到慢查询日志中;
    • 0.2)long_query_time 的默认值为10, 则表示运行时间超过10秒的sql语句被记录到慢查询日志中;
    • 0.3)通过收集超过10秒的sql, 结合之前 explain 进行全面分析;

    1)mysql的慢查询日志

    • 1.1)默认情况下, mysql没有开启慢查询日志,需要手工开启;
    • 1.2)如果不是调优需要的话,一般不建议启动该参数; 因为开启慢查询日志或多或少会带来一定的性能影响。慢查询日志支持将日志记录写入文件;

    2)查看是否开启慢查询日志以及如何开启? 
    默认: show variables like '%slow_query_log%';

    开启: set global slow_query_log=1;

    【注意】

    • 注意1: 使用 set global slow_query_log=1 开启了慢查询日志只对当前数据库生效, 如果mysql重启以后则会失效;
    • 注意2:如果要永久生效,必须修改配置文件 my.cnf ;

    如何设置long_query_time ?
    show variables like 'long_query_time%';
    查询 long_query_time的值?即查询当前多少秒算慢?
    show variables like 'long_query_time'

    设置慢的阈值时间? 
    set global long_query_time=3;

    为什么设置后期 long_query_time 还是没变;
    这个时候需要重新连接或新开一个会话; 或者执行 show global variables like 'long_query_time' ;

    如何制造 执行时间超过3秒的SQL?
    如  select sleep(4);

    查看当前有多少条慢查询sql?
    show global status like '%slow_queries%';

    补充1:如何在my.ini文件中配置mysql的慢查询参数, 如下:
    补充2: 日志分析工具 mysqldumpslow ,常用于在生产中分析sql的性能;

     

    =============================================================================================
    【3】、批量数据脚本;

    -- 新建函数-产生随机的字符串
    drop function if exists rand_str;
    delimiter ##
    create function rand_str(n int) returns varchar(255)
    begin 
    	declare chars_str varchar(100) default 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    	declare return_str varchar(255) default '';
    	declare i int default 0;
    	while i < n do 
    		set return_str=concat(return_str, substring(chars_str, floor(1+rand()*52), 1));
    		set i=i+1;
    	end while;
    	return return_str;
    end ## 
    delimiter ;
    
    -- 新建函数-产生随机的整数
    drop function if exists rand_num; 
    delimiter ##
    create function rand_num() returns int
    begin 
    	declare i int default 0;
    	set i=floor(100+rand()*10);
    	return i;
    end ## 
    delimiter ;
    
    -- 创建存储过程,函数没法单独被调用,只能通过存储过程进行调用;
    -- 新建存储过程-调用函数批量插入数据 
    drop procedure if exists insert_emp; 
    delimiter ##
    create procedure insert_emp(in start_num int, in max_num int) 
    begin 
    	declare i int default 0;
    	set autocommit=0;
    	repeat 
    		set i=i+1;
    		INSERT INTO mybatis.emp_tbl (emp_id, dept_id, name)VALUES(rand_num(), rand_num(), rand_str(20));
    		until i = max_num
    	end repeat;
    	commit;
    end ## 
    delimiter ;
    
    
    call insert_emp(0, 100000)
    ;

    =============================================================================================

    【4】show profile

    4、show profile
    4.0)intro:
    show profile 提供了比 explain 更加细粒度的sql执行计划分析和sql优化;
    4.1)是什么: 是mysql提供可以用来分析当前回话中语句执行的资源消耗情况。可以用于sql的调优测量;
    4.2)官网: https://dev.mysql.com/doc/refman/8.0/en/show-profile.html 
    4.3)默认情况下,参数处于关闭状态,并保持最近15次的运行结果;
    4.4)分析步骤:

    • 步骤1:是否支持,看看当前的mysql版本是否支持 show profile;
    • show variables like 'profiling';
    • 步骤2:开启功能,默认是关闭,使用前需要开启;
    • 步骤3:运行 sql; 且要运行耗时长的sql;
    • select * from emp_tbl e inner join dept_tbl d on e.dept_id = d.dept_id
      ;
      select * from emp_tbl e left join dept_tbl d on e.dept_id = d.dept_id
      ;
      select * from emp_tbl group by rcrd_id%10 
      ; 
    • 步骤4:查看结果,show profiles;
    • 步骤5:诊断sql, show profile cpu, block io for query 上一步前面的问题sql数字号码; 查看一条sql的完整生命周期;  show profile cpu, block io for query 3; 
    • 补充: 不仅仅可以查看 cpu, block io , 还可以查看如下类型的信息;
    • 步骤6: 日常开发需要注意的结论;以下结论都是性能比较差的sql的表现形式,即 show profile cpu, block io for query 3; 中的status中出现以下4种中的一种或几种,则sql执行效率较差,需要优化; 

    【关于show profile的结论】

    • 结论1)converting heap to myisam 查询结果太大, 内存都不够用了,往磁盘上搬;
    • 结论2)creating tmp table 创建临时表: 拷贝数据到临时表,用完再删除;
    • 结论3)copying to tmp table on disk, 把内存中临时表复制到磁盘,危险
    • 结论4) locked :锁住;  
       

    =============================================================================================

    【5】、全局查询日志;
    5.1、配置启用: 在mysql的 my.ini 中,配置如下:

    #开启
    general_log=1
    #记录日志文件的路径
    general_log_file=/path/logfile
    #输出格式
    log_output=FILE

    5.2、编码启用:命令如下:

    set global general_log=1;
    set global log_output='TABLE';


    此后, 你所编写的sql语句, 将会记录到 mysql库里的general_log 表,可以用下面的命令查看:
    select * from mysql.general_log; 


    5.3、建议不要在生产环境开启这个功能, 仅在测试环境开启以便调试;

     

    【建议】 建议使用 show profile 功能分析和优化sql性能; 
     

     

    展开全文
  • sql执行效率

    2012-11-26 23:20:57
    sql语句执行效率,有很多的总结哦!有很多关于怎么去提高效率的问题哦
  • 2.navicate如何知道sql执行效率

    千次阅读 2019-10-19 09:39:18
    所以说,看执行时间并不是最好的标准,那么我们可以怎么去查看sql执行效率的一些因素。 navicat界面给出了“解释”功能,当我们执行完sql,点击“解释”就可以看到sql执行相关的参数。 最值得注意的就是type。...
  • sql server 查看执行效率不高的语句
  • Oracle中语句执行效率问题的查找与解决:一、识别占用资源较多的语句的方法(4种方法)1.测试组和最终用户反馈的与反应缓慢有关的问题。2.利用V_$SQLAREA视图提供了执行的细节。(执行、读取磁盘和读取缓冲区的次数)• ...
  • Oracle的SQL语句执行效率问题查找与解决方法文.pdf
  • Oracle中SQL语句执行效率的查找与解决..
  • SQL怎么优化执行效率更高?

    千次阅读 2021-05-25 16:29:35
    SQL怎么优化执行效率更高? 1.SQL优化的原则是:将一次操作需要读取的BLOCK数减到最低,即在最短的时间达到最大的数据吞吐量。 调整不良SQL通常可以从以下几点切入: 检查不良的SQL,考虑其写法是否还有可优化内容 ...
  • 详细介绍了使用 BULK COLLECT 进行批量操作 提高sql执行效率 使用MERGE INTO USING 一条sql搞定 新增和修改 使用connect by 进行递归树查询
  • SQL执行效率和性能测试方法总结

    万次阅读 2014-12-24 17:53:17
    对于做管理系统和分析系统的程序员,复杂SQL语句是不可避免的,面对海量数据,有时候经过优化的某一条语句,可以提高执行效率和整体运行性能。如何选择SQL语句,本文提供了两种方法,分别对多条SQL进行量化的分析。 ...
  • 提高sql执行效率的几点建议提高sql执行效率的几点建议
  • 显示 sql 执行效率.

    2009-01-02 17:59:01
    描述显示SQL语句的执行效率以及怎样手动引导显示SQL语句执行效率的方法。
  • 利用 V$SQLAREA 视图提供了执行的细节 (执行读取磁盘和读取缓冲区的次数 ) 数据列 EXECUTIONS 执行次数 DISK_READS 读盘次数 COMMAND_TYPE 命令类型 (3:select,2:insert;6:update;7delete;47:pl/sql 程序单元
  • 给你一条sql如何知道它的执行效率

    千次阅读 2020-06-08 10:59:00
    2.navicate如何知道sql执行效率 了-凡 2019-10-19 09:39:56 308 收藏 分类专栏: # Navicate使用指南 开发工具使用 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...
  • 优化sql语句提高oracle执行效率(34种方法) (1)选择最有效率的表名顺序(只在基于规则的优化器中有效): Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将...
  • SQL艺术、提高SQL执行效率的方法总结SQL艺术、提高SQL执行效率的方法总结SQL艺术、提高SQL执行效率的方法总结SQL艺术、提高SQL执行效率的方法总结SQL艺术、提高SQL执行效率的方法总结SQL艺术、提高SQL执行效率的方法...
  • sql执行效率,innodb_data_read
  • 在oracle sqlplus客户端(plsql developer工具不支持),通过set autotrace来查看(适用于在测试库反复调试对比sql执行效率),例如: SQL> set autotrace traceonly; SQL> select * from t2;  已选择...
  • 一、开启慢查询日志捕获慢SQL 查询mysql是否开启慢日志捕获:SHOW VARIABLES LIKE ‘%slow_query_log%’; 如果还没开启的话,开启:SET GLOBAL slow_query_log=1; 查看慢查询的时间阙值:SHOW GLOBAL VARIABLES ...
  • 查询到效率低的 SQL 语句 后,可以通过 EXPLAIN 或者 DESC 命令获取 MySQL 如何执行 SELECT 语句的信息,包括在 SELECT 语句执行过程中表如何连接和连接的顺序,比如我们想计算 2006 年所有公司的销售额,需要关联 ...
  • 优化sql语句执行效率几点需要注意的事项
  • 我们用开发sql的时候会发现,有时候asp执行比较慢,我们可以用下面的方法,来提高执行效率
  • SQL语句执行效率及分析

    千次阅读 2017-01-03 15:04:10
    1.关于SQL查询效率,100w数据,查询只要1秒,与您分享: 机器情况 p4: 2.4 内存: 1 G os: windows 2003 数据库: ms sql server 2000 目的: 查询性能测试,比较两种查询的性能 SQL查询效率 step by step -- ...
  • 查询结果:{  "query_block": {  "select_id": 1,  "cost_info": {  "query_cost": "8.42"  },  "table": {  "table_name": "td",  "access_type": "range", ... "possible_keys
  • 需求: 有一张临时表 , 数据总数100w条, 其中 50w条 , state = 1 50w条 , state = 0 因为数据无用 , 所以需要 更新 所有数据的 state 为 1 ; 环境 数据库 : oracle 11g ... 开发工具: PL/SQL 方案: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 402,700
精华内容 161,080
关键字:

sql执行效率

友情链接: seril.zip