精华内容
下载资源
问答
  • 为提高oracle的sql执行效率,优化性能,通过oracle表分析功能进行调整,能加快sql查询效率2倍以上
  • Shell脚本执行效率

    千次阅读 2018-01-22 22:01:32
    低效的shell脚本设计会进一步影响原本解释器模式下并不见长的程序运行效率,使其在面对大数据量文本分析时的资源与时间消耗变成难以接受的。本文分析了shell语言及其应用需求的特点,从分层设计的角度提出了“自底...

    一、引言
    低效的shell脚本设计会进一步影响原本解释器模式下并不见长的程序运行效率,使其在面对大数据量文本分析时的资源与时间消耗变成难以接受的。本文分析了shell语言及其应用需求的特点,从分层设计的角度提出了“自底向上进行shell脚本编程”的理论,同时提出了从“外部系统环境”到“内部执行模式”全面的掌握工具软件的方法。实例充分证明,自底向上的shell脚本编程思想及方法能够有效提高脚本的执行效率。
    作为解释型的脚本语言,天生就有效率上边的缺陷。尽管它调用的其他命令可能效率上是不错的。
    Shell脚本程序的执行是顺序执行,而非并行执行的。这很大程度上浪费了可能能利用上的系统资源。
    Shell每执行一个命令就创建一个新的进程,如果脚本编写者没有这方面意识,编写脚本不当的话,是非常浪费系统资源的。
    hell脚本开发便是这样一个整体的编程过程:基于shell结构化程序设计语言,并通过调用上述工具软件,形成类似命令批处理程序的shell脚本。shell与工具软件的紧密联系使得shell脚本开发具有鲜明的“自底向上”编程风格。掌握shell脚本编程既要熟悉shell程序设计语言,同时也要熟练掌握find/sed/awk/grep等各种工具软件。

    二、 shell脚本优化的意义
    编写高效的shell脚本,这不仅是出于优秀程序员对精简高效程序的追求,更为了满足实际的应用需求。shell是一种解释型语言,尽管从执行方式方面考虑,解释型程序的效率上比不上C语言等编写的编译型程序,但脚本其所具有的简便快捷的特点使其能够有效实现对系统任务和重复性任务的自动化管理操作,普遍应用在日常的数据处理之中。

    系统管理员在进行系统信息采集或网站日志处理中经常要面对从上百万或更大数据量的文件中提取、分析数据的需求,实际上优化shell脚本效率的效用直接体现在这种大数据量的文本处理上。低效的shell脚本设计会进一步影响原本解释型执行模式下并不见长的shell脚本运行效率,特别是在面对大数据量文本分析时的资源与时间消耗变成难以接受的。

    此外,程序的优化需要有针对性,盲目的优化是费时费力的。“过早的优化,是万恶之源”。算法大师Donald E. Knuth曾分析到:程序员经常会由于预先的判断错误把97%的时间花费在优化非关键模块的效率之上,却只花了3%的时间在关键模块上,因此过早的优化是没必要的,只有确定了关键模块的真正所在,对其进行的优化才是有价值的。如何有针对性的去优化shell脚本,提高脚本执行效率?

    三、 shell脚本优化的方法
    从shell的编程模式来看,shell结构语言与各应用软件紧密结合的特色使shell编程具有鲜明的自底向上的编程风格。Shell和系统分别提供各种内置函数和工具软件,这些工具软件相当于程序设计中可重用的模块代码, 并且是采用C语言等语言开发的高效模块。这些工具软件的使用大大弥补了shell作为解释器在效率上的缺陷。同时尽管在应用需求上存在交叉,不同的工具具有不同的执行模式使其在解决同一个需求也存在效率上的差别,因此,采用何种工具直接影响着shell脚本的执行效率。

    下边是一个工具软件应用效率的体现实例 :

    需求:计算1到100000累加结果

    方法1:采用bash shell的数值计算

    # time for((i=0;i<=100000;i++)); do ((sum+=i)); done ; echo $sum

    real 0m1.134s

    user 0m1.080s

    sys 0m0.048s

    5000050000

    方法2:采用awk的数值计算

    # time awk ‘BEGIN{while(i++<100000)sum+=i; printf “%d”, sum;}’

    5000050000

    real 0m0.029s

    user 0m0.020s

    sys 0m0.000s

    实例结果分析:同等的累加运算,采用shell的数值计算耗时1.134秒,采用awk工具只需要0.029秒。实验结果表明,适当的采用工具软件,能够明显提高shell脚本的执行效率。

    “一个程序只做一件事,并做好。程序要能协作。程序要能处理文本流,因为这是最通用的接口”,shell脚本开发便是这样一种“自底向上”的编程过程,这种过程既充分体现了UNIX的编程哲学,也体现了模块化结构式程序的模块化思想及其封装性与紧凑性。这种紧凑性表现在shell编程中必备的各种工具内部功能的精简,高效和无冗余。shell充分利用了这些工具,提高了脚本的适用范围。

    基于shell脚本的“自底向上”的编程风格,可以从工具软件的挑选和应用方向考虑优化程序效率。而工具软件的挑选与应用,离不开以下二点:

    a:系统原理知识的了解及应用

    b:工具软件的执行模式的了解及应用

    系统是工具软件的外部条件和应用环境,执行模式是软件的内部环境,只有由里到外对工具软件进行全面的了解,才能够结合实际需求和设计,提高脚本执行效率。

    计算shell脚本的执行时间

    #!/bin/bash
    start=`date +%s`
    ls -al >/dev/null 2>&1
    
    sleep 5s
    end=`date +%s`
    dif=$[ end - start ]
    echo $dif

    四、 系统原理及应用
    1.文件系统
    了解操作系统相关原理能够帮助更好的理解、掌握并应用工具软件。首先以文件系统为例,只有了解LINXU的根文件系统,才能更好的理解find命令查找文件时的深度优先查找方式。再比如:通常LINUX文件系统包括存放于文件索引列表的文件相关信息和存放于磁盘数据块中的实际数据。有部分命令是采用索引列表里的文件信息,有些命令则需要去遍历数据。根据需求采用适当的工具才能提高脚本执行效率。

    实例 :文件系统应用

    需求:计算定长大数据量文件的总记录数

    方法1:采用wc命令,在文件遍历过程中累计文件记录数。

    方法2:采用ls命令,读取索引中的文件大小信息,除以单条记录长度即可获得总记录数。

    实例结果分析:方法2的效率在于充分利用了文件系统和需求,减少了文件I/O和遍历计算。在大文件处处理中的效率提高程序尤为明显。

    2 管道
    管道是UNIX及其兼容系统中最早也最通用的进程间通信(IPC)手段,shell采用管道线简便实现了管道应用,管道已经普通采用于各种shell脚本程序中。

    只有了解文件系统,多进程编程等相关知识方能更好的掌握管道的应用。管道实质上是内核基于在内存中构造的管道文件系统(PIPEFS)实现的。父子进程一端采用只读方式打开文件,另一端采用只写的方式。命名管道则是进一步利用了文件系统使应用管道的进程脱离了父子关系的限制。另外,BASH中的每一条的管道都是在其子进程环境中运行的,基于进程间环境的独立性,管道内的变量操作并不会对父进程同名变量产生影响。

    通过管道线将多个存在数据流依赖的命令进行重定向和连接,既实现了进程间通信,又避免了数据流落地产生了IO消耗和临时文件处理工作。

    3 正则
    shell中的正则是形式语言学中正则语言理论的实际应用。形式语言探究的是语言的内容和规则的严格论证。构成语言的基本要素是字符集和在其之上的语法定义。shell中存在的诸多正则标准或称流派便是根源于各标准支持的不同的元字符定义和对基本规则的扩展;此外正则表达式的应用过程分为分析,编译,执行三个过程。通常将正则在这过程中所采用的不同的数据结构与匹配算法归类为不同的正则引擎,主要包括DFA和NFA二种方式。DFA正则引擎采用确定型有限自动机模型,对每个输入字符都有确定的输入状态,对于字符串只需要一遍扫描即可完成算法。所以DFA引擎效率较高,但支持的功能较少;后者采用非定型有限自动机模型,增加了回溯机制,使得能够支持环视,非贪婪等功能,但也因为回溯影响了效率。

    正是基于不同的正则标准使得正则表达式总是要在复杂性,效率,与准确性三点进行平衡。一般来说,对于相同目的的正则表达式复杂度会随着准确性提高并且影响效率。不同的工具软件支持的正则标准也存在差别。如何优化正则是一个较大的话题,可以参考《精通正则表达式》一书。

    正则是文本匹配的利器,被广泛应用于字符串匹配之中,而字符串匹配往往是进行文本增加、删除、修改、查询等操作的基础前提。从效率上考虑,尽管正则使用起来十分方便,但出于效率考虑,正则却未必是最好的选择。实际的shell脚本开发中需要了解各种工具所支持的正则标准和正则匹配脚本运行中占用的时间比,在开发过程中结合实际需求,考虑是否需要采用正则,然后再考虑采用哪种工具哪种正则标准。

    实例:正则效率。

    需求:某文本以空格和/进行分隔,获取第五列的内容.

    方法1:采用正则[ /]分别匹配二种分隔符,取得第五列

    # time awk -F’[ /]’ ‘{print $5}’ a.txt >/dev/null

    real 0m17.717s

    user 0m14.749s

    sys 0m2.844s

    方法2:实际数据分析中发现,可以采用单字符解析的方式,首先根据“空格”分隔符取得第4列,再利用“/”分隔符取得第二列。

    # time awk ‘{print $4}’ a.txt |awk -F/ ‘{print $2}’ >/dev/null

    real 0m0.565s

    user 0m0.224s

    sys 0m0.688s

    实例结果分析:awk采用-F指定分隔符,在多分隔符情况下,会启用正则去解析记录,增加了函数调用,和字符串匹配的消耗,效率上理所当然的比不上默认的空格或单字符分隔符采用的简单的字符比较方式,尽管如此,方法2依赖于对需求的进一步分析,适用的需求范围没有使用正则那么简便灵活。

    展开全文
  • **介绍:**可以通过配置sql执行效率插件来得出每个sql的执行效率 该插件使用前 需要将环境改为dev(开发环境)或者test(测试环境) 步骤 1.注入sql执行效率插件 //Sql执行效率插件 @Bean @Profile({"dev","test"}) //...

    **介绍:**可以通过配置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.进行测试
    测试图样
    只要超过设置的时间 就会报错 执行不了。

    展开全文
  • Java Python 执行效率对比

    万次阅读 2019-09-16 14:55:09
    Python代码开发效率非常高,同样的函数功能,Java需要十几行,Python只要几行,代码数量要远小于Java,这样开发的时间和效率比Java高很多。 2 . 代码运行速度 Java是静态语言静态编译的,直接执行,速度上要比Python...

    Java和Python两门语言都是目前非常热门的语言

    优缺点比较

    1 . 代码开发效率

    在这里插入图片描述
    Python代码开发效率非常高,同样的函数功能,Java需要十几行,Python只要几行,代码数量要远小于Java,这样开发的时间和效率比Java高很多。

    2 . 代码运行速度

    在这里插入图片描述

    Java是静态语言静态编译的,直接执行,速度上要比Python快的很多。
    而Python动态类型语言,一边执行一边编译,所以要比Java慢。

    下面针对Java和Python进行最简单的计算效率比较 (计数)

    10万次计数效率

    Java 执行10万次计数 , 消费时间为 1 毫秒
    

    Java 10万次计算

    Python 执行10万次计数 , 消费时间为 10 毫秒
    

    Python 10万次计算

    1000万次计算效率

    Java 执行1000万次计数 , 消费时间为 7 毫秒
    

    Java 1000万次计算

    Python 执行1000万次计数 , 消费时间为 935 毫秒
    

    Python 1000万次计算

    如果针对程序的运行效率有很大的要求,可选择Java 。

    展开全文
  • 如何判断函数的执行效率

    千次阅读 2018-01-30 18:34:56
    将下面的函数按照执行效率高低排序。它们都接受由0至1之间的数字构成的列表作为输入。这个列表可以很长。一个输入列表的示例如下:[random.random() for i in range(100000)]。你如何证明自己的答案是正确的。 ...

    将下面的函数按照执行效率高低排序。它们都接受由0至1之间的数字构成的列表作为输入。这个列表可以很长。一个输入列表的示例如下:[random.random() for i in range(100000)]。你如何证明自己的答案是正确的。

    def f1(lIn):
        l1 = sorted(lIn)
        l2 = [i for i in l1 if i<0.5]
        return [i*i for i in l2]
    
    def f2(lIn):
        l1 = [i for i in lIn if i<0.5]
        l2 = sorted(l1)
        return [i*i for i in l2]
    
    def f3(lIn):
        l1 = [i*i for i in lIn]
        l2 = sorted(l1)
        return [i for i in l1 if i<(0.5*0.5)]
    这是一道面试题,网上给出的答案有些是错误的,我通过理论和实验进行分析一下。

    分析函数执行效率,关键需要知道的就是每个步骤的时间复杂度。

    上面的三个函数都是用了一个sorted()函数和两个for循环,for循环的时间复杂度很明显是O(n),关键看sorted()函数的时间复杂度。

    在所有的排序算法当中,平均时间复杂度最低的是O(nlogn),python的内置排序函数sorted()的时间复杂度肯定是>=O(nlogn)。


    所以sorted()函数的时间复杂度是要大于两个for循环的时间复杂度的,sorted()函数处理的数据越多,效率越低。

    f1()和f3()需要对所有的数据进行排序,而f2()只需要对一半的函数进行排序,所以f2()的效率要高于f1()和f3()。

    对于f1()和f3(),不太容易通过观察分辨哪个效率更高一些,只能通过实验证实了,通过实验发现f3()要略微优于f1()。

    实验的话,可以通过python的cProfile.run()方法

    测试结果如下图:


    展开全文
  • Python--详述执行效率和开发效率

    千次阅读 2019-02-10 23:53:41
    编程语言效率一词上无外乎两种:开发效率和执行效率,目前市面上没有一种可以兼得两者的编程语言; python则是更偏向于开发效率,至于执行效率,小编认为可以靠硬件支撑一下;下面我们就来分析一下python为什么性能差! ...
  • 对于做管理系统和分析系统的程序员,复杂SQL语句是不可避免的,面对海量数据,有时候经过优化的某一条语句,可以提高执行效率和整体运行性能。 如何选择SQL语句,本文提供了两种方法,分别对多条SQL进行量化的分析...
  • sql server 查看语句执行效率

    千次阅读 2019-01-15 09:40:10
    set STATISTICS time on; sql;
  • 只关注循环执行次数最多的一段代码2.加法法则:总复杂度等于量级最大的那段代码的复杂度3.乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积几种常见时间复杂度实例分析1. 必须明确一个概念:常量级时间...
  • QT优化执行效率

    千次阅读 2019-05-07 10:05:32
    学习QT过程,自己开发的软件在执行速度不是很流畅。在之后的研究大神们的源代码,发现了一些能够加快执行效率的方法,因此记录下来。
  • 为什么C与C++执行效率高,运行快?

    千次阅读 2020-03-29 11:52:00
    因为C跟C++是全部翻译,再执行的语言 Java与python、php、ruby、C#是边执行边翻译的语言
  • 2.navicate如何知道sql执行效率

    千次阅读 2019-10-19 09:39:18
    所以说,看执行时间并不是最好的标准,那么我们可以怎么去查看sql执行效率的一些因素。 navicat界面给出了“解释”功能,当我们执行完sql,点击“解释”就可以看到sql执行相关的参数。 最值得注意的就是type。...
  • switch case与if else执行效率分析

    千次阅读 2017-05-23 02:38:22
    结论:switch...case的效率会比if...else要高一些 一、 if...else语句 对if...else函数反汇编后,能看见这个函数所采用的方法是按顺序去比较(jne表示“当不等于时转移”),如果输入的数值所对应的if条件靠后的...
  • Oracle中update执行效率的优化

    万次阅读 2018-01-24 10:25:09
    工作中经常遇到update大表的时候执行效率很低,那么怎样才能让Oracle中update数据量比较大的表执行的更快呢?先看个简单的例子吧: 需求是我们要将表INTF_CMS_CALLUSER_TPYE中的LANT_ID更新成CMS.SERV_BASE_MSG表中...
  • 关于for循环的执行效率问题

    千次阅读 2017-12-09 20:18:57
    这两个程序那个执行效率高,如果是以前我会毫不犹豫的说是第一个效率高,这是由于cpu切换的次数比较多导致性能下降,知道这句话不理解什么原理。我比较赞同下面的说法, 1. 最长循环放到内部可以提高I cache的...
  • 多种编程语言执行效率的比较

    万次阅读 2017-07-17 18:29:40
    我们经常用不同种编程语言来完成我们的工作,但是它们的执行效率如何呢,我们通过递归的方式计算斐波那契数列的前40项和来比较。拿来进行比较的编程语言有:C,C#,Java,JavaScript,Python,Lua等。拭目以待吧
  • 浅谈C++/JAVA/C#运行机制和执行效率

    千次阅读 2018-04-23 00:09:29
    浅谈C++/JAVA/C#运行机制和执行效率 估计有很多同学都对C++/JAVA/C#这三大热门语言的运行机制和执行效率有或多或少的困惑,自己也有,但是经过前期的学习,了解了三者在这两方面的区别,就废话不说了,进入主题吧。...
  • 原文地址查询语句: SELECT TOP 1000 ST.text AS '执行的SQL语句', QS.execution_count AS '执行次数', QS.total_elapsed_time AS '耗时', QS.total_logical_reads AS '逻辑读取次数', QS.total_logical_w...
  • Postgresql查看SQL语句执行效率

    千次阅读 2017-11-20 15:22:57
    Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看 SQL 语句的执行效 果,可以帮助选择更好的索引和优化查询语句,写出更好的优化语句。...
  • innerjoin 和 exists的执行效率区别

    千次阅读 2018-12-07 09:22:00
    今天在实现业务时发现经常使用exists语句竟然执行效率低下根本不出结果,反而innerjoin可以瞬间得到结果。后来发现是因为exsits需要从40万的数据集中去匹配200条数据是非常消耗资源的。 总结: 首先要确定数据分布...
  • 关注、星标公众号,不错过精彩内容素材来源:网络编辑整理:strongerHuang为什么有些CPU的主频更低,但运算效率却更高呢?比如:51单片机30M主频,STM32单片机20M主频,...
  • 测试代码执行效率的几种方法比较

    千次阅读 2016-11-23 11:48:28
    ## 一般我们在项目中为了测试某段代码的执行效率一般会使用到NSDate , CFAbsoluteTimeGetCurrent() , CACurrentMediaTime() 这几种常用方法. ##
  • (二)switch与if-else的执行效率比较 当分支较多时,当时用switch的效率是很高的。因为switch是随机访问的,就是确定了选择值之后直接跳转到那个特定的分支,但是if-else是遍历所以得可能值,知道找到符合条件的...
  • sql 语句怎么写,可能会有不同的执行效率和所需要的资源。下面是一种oracle 自带的一种,可以判断你所使用的资源。通过对比你可以判断使用哪种sql 对你的帮助更大 Explain plan for SQL     Select * from ...
  • 前言:博主最近在比较python和go语言写的web服务器的执行效率问题,在看了google搜索结果后,产生了疑问 1.为什么python的异步执行框架tornado效率可以和go语言媲美? 2.为什么随着线程的增加,并发数的增长呈现...
  • 但是如果我把以上程序写入到oracle的java source中,并且调用以这个java source生成的function,执行效率就非常慢,大概是6到7分钟。 后来把BufferedWriter bw 的write过程去掉(即只执行查询),时间是13s, 就是...
  • 2:python,作为脚本语言,和编译型语言做比较不合理,但是比较速度也是逃不过的坎,执行效率慢得很,但是很多语言把它作为胶水语言,上层用python做逻辑处理,而底层用C++做运算,我见到有深度学习、游戏服务器、...
  • mysql中explain查看sql语句执行效率

    千次阅读 2016-12-27 14:54:45
    explain显示了MySQL如何使用索引来处理select语句以及...这个不重要,查询序号即为sql语句执行的顺序 select_type select类型,它有以下几种值  simple 它表示简单的select,没有union和子查询  primary 最外面的sel
  • 多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程; 资源分配给进程,同一进程的所有线程共享该进程...
  • MySQL的in语句和or哪个执行效率更高?

    千次阅读 2019-06-27 18:08:42
    A组or和in的执行时间: or的执行时间为:0.002s in的执行时间为:0.002s B组or和in的执行时间: or的执行时间为:0.004s in的执行时间为:0.004s C组or和in的执行时间: or的执行时间为:0.006s in的执行时间为...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,621,164
精华内容 648,465
关键字:

执行效率