精华内容
下载资源
问答
  • 代码里写很多if会影响效率吗?

    千次阅读 2021-03-08 00:37:28
    看你怎么写 if.嵌入很多层if的代码叫做“箭头代码”,是一个anti-pattern。...每次condition的判断就是一个计算,但是if-else的存在增加了程序语言的表达能力,提高了开发效率。如果纯粹从性能的...

    看你怎么写 if.

    嵌入很多层if的代码叫做“箭头代码”,是一个anti-pattern。 这种代码会增加程序的循环复杂度 (Cyclomatic complexity)

    具体可以看这里:Flattening Arrow Code

    这里:

    总的来说,程序里用if-else是有开销的。每次condition的判断就是一个计算,但是if-else的存在增加了程序语言的表达能力,提高了开发效率。

    如果纯粹从性能的角度看,不用if-else肯定比用好。但是在某些情况下CPU可以做到让程序性能近似于没有if-else的情况。stackoverflow上有一个经典问题:Why is it faster to process a sorted array than an unsorted array?

    现代CPU在运行到if的时候,不会先判断condition然后再选择进入if-else的哪一个分支。它们真正做的是直接进入一个分支执行,如果猜错则回滚此分支的操作然后换另一个分支执行。如果CPU每次都猜对,就会让程序性能接近没有if-else的情形;反之则会造成开销。那么如何让CPU猜对呢?如果condition 大部分时间都是true,少部分时间是false,那么CPU 就比较好猜,反之,如果condition的值是一个随机值,那么CPU每次就得“瞎猜”,猜对的概率就会低了。

    当然,如果你的if-else不是出现在循环里,一般不会造成太大开销。

    =============分割线==============================

    回答一下讨论区里的问题。因为我也不是做CPU的,就当抛砖引玉。希望大家指正!

    现代CPU运行时不是一条命令一条命令的执行,而是一下读进多条命令,并且对这些命令进行优化,生成流水线(pipeline)。优化后的流水线的运行效率是非常高的。生成流水线也是一个耗时的工作。CPU遇到if的条件语句时根据分支预测器的结果选择跳转还是不跳转。并且把相应分支里的命令载入生成流水线。CPU同时还会并行地执行条件语句。如果对就继续执行,如果错就把当前分支的流水线抛弃然后载入另一个分支生成流水线。所以如果每次都猜对,程序的运行效率就会基本和没有if差不多。

    展开全文
  • 然后再在这10个结果中查询出年龄大于25岁的学生,这样遍历的次数一下子就减少了很多很多 总结:所以,千万不要以为where语句中字段的顺序可以随便乱写,应该结合具体情况来安排好顺序,以使效率更高, 当然,如果想...

    学生表 Student

    id(编号)

    name(名字)

    age(年龄)

    height(身高)

    1

    Tommy

    26

    170

    2

    Jerry

    23

    180

    3

    Frank

    30

    160

    如表所示,这里只是呈现了3条数据,我们这里假设有1万条数据,

    查询年龄25岁以上,身高170以上的全部学生

    Select * from Student where age > 25 and height > 170;//正常情况下可以这么写,

    假设1:年龄在25岁以上的有8000个学生,而身高170以上的只有10个学生,

    上述的SQL的执行顺序和查询的行数应该是:

    1.先查询年龄25岁以上的学生,结果有8000条记录,

    2.再查询身高170以上的学生,就得在8000条结果里再次判断,最坏的可以遍历8000次左右,这效率较低

    假如更改上述SQL语句where条件字段的顺序,如下:

    Select * from Student where height > 170 and age > 25;

    那么结果将是:

    1.首先是查询出身高170以上的学生,结果只有10个;

    2.然后再在这10个结果中查询出年龄大于25岁的学生,这样遍历的次数一下子就减少了很多很多

    总结:所以,千万不要以为where语句中字段的顺序可以随便乱写,应该结合具体情况来安排好顺序,以使效率更高,

    当然,如果想效率进一步提高,应该在这两个字段上建立索引 (题外: 索引的建立以及 什么条件下索引才会被调用)

    展开全文
  • 看到有资料说,where条件的顺序会影响查询的效率,根据的逻辑是:where条件的运行是从右到左的,将选择性强的条件放到最右边,可以先过滤掉大部分的数据(而选择性不强的条件过滤后的结果集仍然很大),在根据其它条件...

    看到有资料说,where条件的顺序会影响查询的效率,根据的逻辑是:

    where条件的运行是从右到左的,将选择性强的条件放到最右边,可以先过滤掉大部分的数据(而选择性不强的条件过滤后的结果集仍然很大),在根据其它条件过滤时,需要比较的数据量就少,提高查询的效率。

    当我看到这个逻辑时,自我认为不是太合理,数据库引擎在执行SQL语句时,都是要经过查询优化器的,查询优化器会将SQL进行优化,选择最优的查询计划来执行,查询优化器应该会选择最优的查询计划,如果仅仅是因为where字句的顺序不同,就不能选择最优的查询计划,那么查询优化器得有多么差劲啊...

    实践是检验真理的唯一标准

    实验条件:

    新建表test_condition,主键为id,还有两列表示姓名的name和年龄的age,数据量为10万条,年龄是18-45

    单列的辅助索引

    1. name列有索引

    EXPLAIN

    SELECT id,name,age from test_condition where name='test99500' and age=30

    查询计划为

    51cea502e171991eb96edb9eee4d28f9.png

    EXPLAIN

    SELECT id,name,age from test_condition where age=30 and name='test99500'

    查询计划为

    74b54ee4550caeaef6ce0cdfdff12c31.png

    从两者的查询计划上来看,两个没有什么区别。

    2. name列有索引,age列有索引

    EXPLAIN

    SELECT id,name,age from test_condition where name='test99500' and age=30

    查询计划

    bceb5f4bd9895af121e0d0f1c654b2c8.png

    EXPLAIN

    SELECT id,name,age from test_condition where age=30 and name='test99500'

    查询计划

    d618cf0fe482ef93328d812d87da8688.png

    同样没有区别

    多列的联合索引

    联合索引

    表的索引:

    09f80f5029e944a8aa14cbc789c57d66.png

    1. 联合索引的列都使用

    EXPLAIN SELECT * from test_condition where `name`='test100' and age = 30

    查询计划:

    36f3e6332d08cf38c01fb52383324c30.png

    EXPLAIN SELECT * from test_condition where age = 30 and `name`='test100'

    查询计划:

    2647379c5c620bcc99e29bcde0d34643.png

    结论: 当联合索引的列都出现在查询条件中时,查询条件的顺序不影响。

    2. 仅使用联合索引中的一列

    EXPLAIN SELECT * from test_condition where `name`='test100'

    查询计划:

    c66530e397304e895ca146ef43304b8b.png

    EXPLAIN SELECT * from test_condition where age = 30

    查询计划:

    d8eda47d1a5279cf1673a0926a4c7574.png

    修改表结构,增加dept列

    EXPLAIN SELECT * from test_condition where `name`='test100'

    查询计划:

    fa066c48f04d44a381e71eadcaab1605.png

    EXPLAIN SELECT * from test_condition where age = 30

    查询计划:

    66315f672ca5029ff49e0e18728c5c92.png

    在表只有id,name,age时,查询时仍然会用到索引,应该是因为使用到了覆盖索引(查询结果列在索引中都存在)。

    当修改完表结构后,可以明确地看出,name条件查询用到了联合索引;而age查询时,使用不到联合索引。

    结论:MySQL遵循最左前缀原理,当查询条件匹配联合索引的前面几列时,可以使用联合索引;否则,不会使用联合索引。

    以上结果均是本人一次测试的结果,仅供参考,如有不对,欢迎指正。

    展开全文
  • Aititi 集合连接 表格连接的join算法 attilax总结 艾... 一般来说,小表去join大表,效率要比大表去join小表高的多。 通常SQL会自动去选择效率好的查询方案。 所以写SQL尽量先查询和过滤数据量小的表,再去join大的表。

    Aititi 集合连接 表格连接的join算法 attilax总结 艾提拉总结

    常见的join算法 - CSDN博客.html

    Nexted-loop join中小表驱动大表的原因分析

    原创 2017年07月31日 20:53:27

    · 标签:

    · 414

    1.

    Next-loop join:

    1. outer_iterator = SELECT A.xx,A.c FROM A WHERE A.xx IN (5,6);

    2. outer_row = outer_iterator.next;

    3. while(outer_row) {

    4. inner_iterator = SELECT B.yy FROM B WHERE B.c = outer_row.c;

    5. inner_row = inner_iterator.next;

    6. while(inner_row) {

    7. output[inner_row.yy,outer_row.xx];

    8. inner_row = inner_iterator.next;

    9. }

    10. outer_row = outer_iterator.next;

    11. }

    过滤后留下的结果集M,N(M>N) 1.如果都走全表的话,大表做驱动和小表做驱动都是M*N 2.如果走索引的话: a.索引对小表的作用不会太大,对于大表索引的作用就很大了,除非索引建的不好。。 b.假设nexted-loop join中驱动表过滤后的行数为K,那么while(outer_row)一定会循环K次,这时驱动表上索引的功能是比聚簇索引占有更小的空间,一个节点上的数据量会更大些,减少随机I/O。 c.如果被驱动表过滤后的行数为W,那么在while(outer_row)中两表连接条件上被驱动表还有机会利用索引来大大减少内循环的次数。

    所以过滤结果中的小表做驱动表。。

    果两个表一样大,效率是一样的。 如果两个表的数据量相差很大,那效率上是有区别的。 一般来说,小表去join大表,效率要比大表去join小表高的多。 通常SQL会自动去选择效率好的查询方案。 所以写SQL尽量先查询和过滤数据量小的表,再去join大的表。

    展开全文
  • mysql子查询效率:利用子查询【SELECT id,`name` FROM customer where id IN(select DISTINCT(customerid) from searchaccount】效率是10倍级的影响。mysql利用子查询后的效率影响仅仅是利用id:explainSELECT * from...
  • 1.所谓的递归慢到底是什么原因呢?大家都知道递归的实现是通过调用函数本身,函数调用的时候,每次调用时要做地址保存,参数...这势必是影响效率的。2.用循环效率会比递归效率高吗?递归与循环是两种不同的解决问...
  • mysql case when 查询一个效率问题

    千次阅读 2021-01-19 08:40:14
    第一种:SELECT`user`.username,`user`.email,`user`.id AS user_id,user_class.level_id,user_class.class_id AS cid,user_class.create_time AS bontime,class.graduation_time,class.offline_graduation_time,...
  • -------------------------------------------- 另外需要注意的地方 在MySQL中涉及到多表查询的时候,需要根据查询的情况,想好使用哪种连接方式效率更高。 1. 交叉连接(笛卡尔积)或者内连接 [INNER | CROSS] JOIN ...
  • 测试方法是影响测试效率的主要因素之一。此外,人为因素、软件类型、缺陷数量、测试充分度等都会对测试效率产生影响。下面对这些因素作一个简要分析。1)人为因素人是软件测试过程中一个重要的组成部分,不同的人的...
  • Mysql高性能笔记影响数据库的因素sql查询速度服务器硬件网卡流量磁盘IO超高的QPS(每秒查询速度)和TPS(每秒事务量)风险:效率底下的SQL假设只有一个CPU,让我们来看下面这张图:image.png可以看到对比,100ms的低效率...
  • 文章的大致结论:MyISAM表,fixed_row_size时,列数量对效率会产生微小的影响。dynamic_row_size时,列数量过多,会对效率产生巨大的负面作用innodb表,由于不存在row-size的区别,char与varchar之间对效率影响小...
  • 而主要是关于其结构体成员嵌套会不会影响程序执行效率等,观点主要是两个方面: 1)不同平台对结构体和全局变量的访问不同; 2)编译器优化能够对这些数据访问轻轻松松的优化; 其实把结构体嵌套多层这样的话题跟...
  • 为什么建议少用if语句,不是影响运行效率! 絮絮叨叨:放假使我的作息混乱… 相信大家或多或少的听说过,少用点if-else吧?但是为什么要少用呢,有人说他会影响程序运行效率,但是这并不是他最大的罪状! if-else ...
  • Java stream 和 for 循环效率对比问题

    千次阅读 2021-03-13 19:03:28
    针对同一个集合,用 stream 操作两次得到两个不同条件筛选出来的集合和map,和一次for循环就搞定搞定的效率对比。虽然stream写起来链式操作很舒服,但效率在不同数据量下的体现效果是不一样的,以下为我的测试代码:...
  • 浅析影响DC-DC转换器效率的主要因素本文详细介绍了开关电源(SMPS)中各个元器件损耗的计算和预测技术,并讨论了提高开关调节器效率的相关技术和特点,以选择最合适的芯片来达到高效指标。本文介绍了影响开关电源效率...
  • 影响DC-DC转换器效率的主要因素

    千次阅读 2020-12-30 06:37:56
    本文详细介绍了一、效率估计能量转换系统必定存在能耗,虽然实际应用中无法获得100%的转换效率,但是,一个高质量的电源效率可以达到非常高的水平,效率接近95%.绝大多数采用什么秘诀才能达到如此高的效率?我们最好...
  • 本文介绍了影响开关电源效率的基本因素,可以以此作为新设计的准则。我们将从一般性介绍开始,然后针对特定的开关元件的损耗进行讨论。一、效率估计能量转换系统必定存在能耗,虽然实际应用中无法获得100%的转换效率...
  • 分析讨论 经过本次实验,在以后创建表格时,尽量保证将主要的数据都插入之后,再添加索引,避免在添加索引之后进行数据插入,以保证效率最高。 注意:删除时,要把代码前面的插入和查询代码注释掉,防止删除失败。
  • 问题:mybatis返回的null类型数据消失,导致前端展示出错思路:如果查询出的结果是空值,应当转换成空字符串。当然在前端也能进行判断,但要求后台实现这个功能。解决方案:使用如下方法查询:SELECT IFNULL(sex,'')...
  • 直接上SQL,然后逐一分析(所有Where查询条件,都有索引),如果你是新手(好吧,其实我也是新手),可以自行分析下,哪条查询效率最佳:SELECT * FROM XXX_0 WHERE XXX_START >= 0 AND XXX_END <= 0;SELECT * ...
  • 性能优化-group by的优化

    千次阅读 2021-05-07 14:14:15
    这个时候我们表中的数据比较大,会大量的占用IO操作,优化了sql执行的效率,节省了服务器的资源,因此我们就需要优化。 注意: 1、mysql 中using关键词的作用:也就是说要使用using,那么表a和表b必须要有相同的列。...
  • 大家好,如题,如果天线不处于谐振状态,意味着天线的虚部不为零,我看到有的网页上面讲辐射效率会减小,但是不知道辐射效率到底会受到多大的影响。如果辐射效率因为天线没有谐振而受到影响,该如何解释这种现象呢,...
  • MySQL排序速度慢而且可能不稳定

    千次阅读 2021-02-04 19:46:25
    三、怎么优化 1、利用索引达到排序目的(针对例子的优化) 针对文章开始的例子,优化原则是Use of Indexes to Satisfy ORDER BY(让ORDER BY用上索引),即提升查询效率,又保证稳定性(索引B+树叶子结点的顺序是...
  • 3、会测滑轮组的机械效率,知道影响滑轮组机械效率的因素。二、重点、难点:重点:有用功、额外功、总功、机械效率、功的原理;如何测滑轮组的机械效率影响滑轮组机械效率的因素。难点:识别有用功、额外功、总功...
  • 则,查询数据库4w次,生成集合的算法按照O(N*ln N)的效率来算平均情况下比较O(4W*ln 4w),约等于64W次,排序次数按照O(N*ln N)的效率来算平均情况下比较O(4W*ln 4w),约等于64W次。 2、顺序取record中的id与第一步...
  • MySQL TEXT字段性能

    2021-02-04 23:34:34
    I now know that TEXT fields are written to disk rather than in memory when queried仅当查询需要临时表来存储多个排序或聚合操作的中间结果时,TEXT字段才会写入磁盘.例如,当您在单个查询中的不同列上混合使用...
  • 我试图优化相对较大的MySQL(myisam)表220,000行。桌子本身并不大 - 大小约为23.5MB。那么,真正的问题是什么? - 我有这样的查询:如何在where子句中优化mysql date_format()以提高速度?SELECT * FROM table WHERE ...
  • 很多没用过java或者没怎么用过java的程序员都会说java执行效率低,这种言论时不时的在影响着我这个初级的java开发者。java执行效率低因如下几点导致(和C++比较):1,java不允许内存地址类型被修改,也不能像C++那样...
  • 如何提高团队的研发效率呢?

    千次阅读 2021-04-25 00:09:03
    研发效率是在现代企业都关注的,注意是因为靠谱的工程师是有限的,而且软件工程师的人力成本较高,时间成本更高。在大多数情况下,软件工程是一个团队活动,通过协作实现突破。好的想法从不匮乏,但高速...
  • mysql> show create table t2\G*************************** 1. row ***************************Table: t2Create Table: CREATE TABLE `t2` (`id` int(11) NOT NULL AUTO_INCREMENT,`rank1` int(11) DEFAULT NUL...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,110,794
精华内容 444,317
关键字:

影响效率