首页
学习
活动
专区
圈层
工具
发布

揪出代码的坏味道

几种常见的代码坏味道: - 重复代码 - 魔数 - 注释掉的代码和死代码 - 打印调试 - 带有数字后缀的变量 - 本该是函数或者模块的类 - 嵌套列表解析式 - 空的except块和糟糕的错误信息 坏味道代码带来的问题...4、打印调试 打印调试是指在程序中临时调用print()显示变量的值,然后重新运行程序的做法。很多人误认为打印调试快速简单,但实际上为了获得用以修复错误的信息,通常需要多次重复运行程序。...5、带有数字后缀的变量 这样的变量名,数字后缀并不能很好地描述这些变量所包含的内容以及它们之间的差异。 6、嵌套列表解析式 列表解析式是创建复杂列表值的一种简单方法。...优化坏味道的方法 1、重复代码 解决重复代码的方法是去重,简单地说,通过把代码放在一个函数或者循环中,使其在代码中只出现一次。 2、魔数 解决方法是使用常量替代魔数。...6、嵌套列表解析式 最好的办法是把列表解析式扩展到一个或者多个for循环中。 最后,我们要正视代码的坏味道,有些代码的坏味道根本不是真正的坏味道。

1K20

数据库查询优化技术(二):子查询优化

连接操作涉及到的两个子问题 3.1多表连接中每个表被连接的顺序决定着效率 如果一个查询语句只有一个表,则这样的语句很简单;但如果有多个表,则会设计表之间以什么样的顺序连接最高效(如A、B、C三表连接,如果...在数据库实现早期,查询优化器对子查询一般采用嵌套执行的方式,即父查询中的每一行,都执行一次子查询,这样子查询会执行很多次。这种执行方式效率低。 而对子查询进行优化,可能带来几个数量级的查询效率的提高。...这样可以把多次表扫描、多次连接减少为单次表扫描和单次连接,如: SELECT * FROM t1 WHERE a1<10 AND( EXISTS(SELECT a2 FROM t2 WHERE t2....t2.a2>10); MySQL不支持对如下情况的子查询进行优化: 带有UNION操作。...带有GROUPBY、HAVING、聚集函数。 使用ORDERBY中带有LIMIT。 内表、外表的个数超过MySQL支持的最大表的连接数。

4.4K00
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    OushuDB-PL 过程语言-控制结构

    函数返回: 1). RETURN expression 该表达式用于终止当前的函数,然后再将expression的值返回给调用者。...随着 RETURN NEXT命令的迭代执行,结果集最终被建立起来。该类函数的调用方式如下: SELECT * FROM some_func(); 它被放在FROM子句中作为数据源使用。...LOOP LOOP定义一个无条件的循环,直到由EXIT或者RETURN语句终止。可选的label可以由EXIT和 CONTINUE语句使用,用于在嵌套循环中声明应该应用于哪一层循环。 2)....CONTINUE 如果没有给出label,CONTINUE就会跳到最内层循环的开始处,重新进行判断,以决定是否继续执行循 环内的语句。如果指定label,则跳到该label所在的循环开始处。...异常捕获: 在PL/pgSQL函数中,如果没有异常捕获,函数会在发生错误时直接退出,与其相关的事物也会随之回 滚。我们可以通过使用带有EXCEPTION子句的BEGIN块来捕获异常并使其从中恢复。

    4.5K20

    深入理解MySQL中的JOIN算法

    一、引言 在关系型数据库中,JOIN操作是SQL查询中至关重要的部分,它能够将多个表中的数据根据指定的条件组合起来。为了高效地执行这些操作,MySQL等数据库管理系统采用了多种JOIN算法。...在理解嵌套循环连接时,可以将其想象为两层嵌套的循环,外部循环遍历一个表(通常称为外表),而内部循环则针对外部循环中的每一行遍历另一个表(称为内表)。...3.1 工作原理 缓冲外部行:块嵌套循环连接首先在外部循环中读取一批行(一个数据块),并将这些行保存在内存中。...块嵌套循环连接在特定的场景下(如内部表远大于外部表且外部表适合内存缓存时)可以显著提高查询性能。...在某些情况下,其他连接策略(如哈希连接或嵌套循环连接)可能更有效。数据库优化器会根据查询的具体情况和表的统计信息来选择最合适的连接策略。

    1.4K20

    Mysql使用left join连表查询时,因连接条件未加索引导致查询很慢

    知识延伸 MySQL使用嵌套循环算法或其变种来进行表之间的连接。 在5.5版本之前,MySQL只支持一种表间关联方式,也就是嵌套循环(Nested Loop)。...如果关联的表数据量很大,那么join关联的时间会很长。在5.5版本以后,MySQL引入了BNL算法来优化嵌套循环。...1.嵌套循环连接算法(Nested-Loop Join Algorithm) 一个简单的嵌套循环连接(NLJ)算法从循环中的第一个表中逐行读取一行,将每行传递给处理连接中下一个表的嵌套循环。...这个过程会重复多次,因为还有剩余的表被连接。...3.块嵌套循环连接算法(Block Nested-Loop Join Algorithm) Block Nested-loop Join 块嵌套循环(BNL)连接算法使用在外部循环中读取的行的缓冲来减少必须读取内部循环中的表的次数

    3.7K10

    TensorFlow 分布式之论文篇 Implementation of Control Flow in TensorFlow

    一个执行帧中执行的任何操作都有一个唯一的迭代 ID,这使得我们能够唯一地识别迭代计算中同一操作的不同调用(比如 hile 操作之中,某一个 op 可能会多次执行)。...,我们都会为条件语境创建一个新的控制流上下文,并在上下文中调用其计算图构造函数(fn1或fn2)。...图 9 嵌套 7. 自动微分 TensorFlow 支持自动求导。例如,用户可以定义一个带有损失函数的神经网络,而 TensorFlow 将自动推导并构建反向传播数据流图。...(参见链接 [1],这是一篇关于反向传播的优秀文章)。 反向传播算法以反向顺序遍历前向图中的操作,并通过调用操作注册的梯度函数逐步构建梯度图。一个操作的梯度函数定义了计算该操作梯度的子图。...如果某个值在反向传播之中被缩减操作(如 Shape、Rank或Size)处理,我们将缩减操作移到前向循环中以减少内存的使用。 如前所述,Enter 的梯度是 Exit。

    11.9K10

    115道MySQL面试题(含答案),从简单到深入!

    MySQL如何执行子查询,以及它们的性能影响是什么?子查询是嵌套在另一个查询中的SQL查询。...MySQL如何处理子查询优化?MySQL通过多种方式优化子查询,包括: - 物化子查询:将子查询的结果临时存储起来,避免多次执行相同的子查询。...这些方法有助于减少查询执行时间,提高数据库的整体性能。71. 如何在MySQL中使用和优化子查询?子查询是嵌套在另一个查询内部的查询。...- 存储过程(Stored Procedure):可以手动调用执行的一组SQL语句。用于封装复杂的业务逻辑。87. 如何在MySQL中优化大型JOIN操作?...这在优化器未选择最优索引时非常有用,但应谨慎使用,因为它可能导致查询性能下降,特别是当数据分布发生变化时。114. 如何在MySQL中使用变量和用户定义的函数?

    21.2K64

    【C语言基础篇】结构控制(下)转向语句break、continue、goto、return

    这些语句在编写程序时常被用到,特别是当循环体内部分支比较复杂时,可用于简化分支语句的条件,减少条件分支语句if的嵌套深度及分支数,使程序更易阅读和理解。...语句后边的部分不再执行,直接进入下一次循 下面依然以打印1-10的数字为例,分别展示continue在三种循环中的使用和效果 1. continue在 while 循环中 #include <stdio.h...四、return语句 在C语言中,return语句用于从函数中返回。 当程序执行到函数中的return语句时,函数的执行会立即结束,返回到调用该函数的地方。...return语句可以带有一个表达式,该表达式的值将作为函数的返回值。 如果return语句没有表达式,那么函数返回的值是未定义的。 函数必须有返回值类型,除了void类型的函数。...void类型的函数不返回任何值,因此不需要return语句。 函数可以有多个return语句,以便在不同的条件下返回不同的值。

    3.2K10

    NodeJS技巧:在循环中管理异步函数的执行次数

    然而,在实际编程过程中,我们经常会遇到一个棘手的问题——如何在循环中控制异步函数的执行次数。这不仅关乎代码的效率,更关乎程序的稳定性和可维护性。...然而,如果不加以控制,异步函数可能会在循环中多次调用,导致请求过多,进而触发目标网站的反爬虫机制。如何优雅地管理异步函数的执行次数,成为我们面临的一个重要挑战。...解决方案为了有效管理异步函数在循环中的执行次数,我们可以使用以下几种技术:Promise.all:通过Promise.all并发执行多个异步函数,并在所有Promise完成后进行处理。...第三方库:如async.js库,提供了多种控制异步流程的方法,包括限制并发数量、批量处理等。...在本示例中,我们将结合async/await和爬虫代理IP技术,演示如何在循环中优雅地管理异步函数的执行次数。案例分析我们将编写一个NodeJS爬虫程序,通过爬虫代理服务抓取目标网站的数据。

    2.5K10

    一篇文章详解你不知道的MySQL JSON数据类型

    这种存储方式允许直接访问嵌套的属性,不需要将整个JSON字符串加载到内存中进行解析。 MySQL提供一系列原生的JSON函数,允许对JSON内容进行查询、修改和操作。...此时,如果需要读取 JSON 的某个字段或元素,应用程序通常会从数据库中查询 JSON 字符串,然后在应用层通过 JSON 解析库(如 Python 的 json 模块)解析成 JSON 对象,最终提取所需的字段...该函数会从 JSON 文档提取指定路径(path)的元素。如果指定 path 不存在,会返回 NULL。可指定多个 path,匹配到的多个值会以数组形式返回。...'; 查询函数的语法糖 在 MySQL 中,提供了基于-> 和 ->> 操作符的语法糖操作,它们会在底层转换为调用 JSON_EXTRACT() 函数(对于 ->)或 JSON_UNQUOTE(JSON_EXTRACT...如果需要处理复杂路径(例如多层嵌套或多个字段的提取),通常需要结合多个查询或者写入虚拟生成列。 修改操作 修改操作包含JSON_SET()和JSON_REPLACE()两个函数。

    45800

    【MySQL】之join算法详解

    这个过程就跟我们写程序时的嵌套查询类似,并且可以用上被驱动表的索引,所以称之为“Index Nested-Loop Join”,简称 NLJ。...Block Nested-Loop Join Block Nested-Loop join,基于块的嵌套循环,简称BNL算法,其优化思路主要是减少被驱动表的循坏次数,它会将驱动表的数据缓存起来,...join buffer的大小是由参数join_buffer_size设定,默认256k。如果一次放不下驱动表的所有数据,会分段放,这种情况下会导致被驱动表扫描多次。...如果被驱动表是冷数据表,并且多次扫描读取被驱动表间隔超过1S的话,就会将他放入LRU链表的young区域,导致业务数据无法进入热数据区,减少了bufferpool的命中率,这又是另外一个课题了,暂不过多展开...再说BKA算法时不得不提的就是MySQL的Multi-Range Read 优化,MRR的目的主要是减少磁盘的随机访问。

    1.2K20

    PHP性能优化:如何避免低效代码和内存浪费

    优化代码的结构和逻辑是提升性能的基础。许多时候,程序员在编写PHP代码时可能会陷入过度嵌套、冗余计算或不必要的循环中。为了避免这种低效,开发者应当注重简化算法,避免不必要的重复计算。...例如,若在一个循环中多次调用相同的数据库查询或API接口,可以考虑将结果缓存起来,减少不必要的请求。合理使用数据结构和算法也非常重要。...开发者应当定期调用unset()释放不再使用的变量,尤其是大对象或数组。使用内存缓存技术,如Memcached或Redis,可以有效减少内存消耗,并提高数据存取速度。...合理使用局部变量、传值调用和对象封装,能够有效减少内存占用,提高代码的可维护性和性能。...PHP性能优化不仅仅是提高执行速度,更多的是要从整体架构、代码逻辑和内存管理等多个方面入手,避免低效代码和内存浪费。

    48210

    GoStub框架使用指南

    被测函数先是 ReadDb 了一个父目录的值,然后在 for 循环中读了若干个子目录的值。...在多个测试用例中都有将ReadDb打桩为在多次调用中呈现不同行为的需求,即父目录的值不同于子目录的值,并且子目录的值也互不相等 被测函数中有一个循环,用于一个批量操作,当某一次操作失败,则返回失败,并进行错误处理...假设该操作为Apply,则在异常的测试用例中有将Apply打桩为在多次调用中呈现不同行为的需求,即Apply的前几次调用返回成功但最后一次调用却返回失败 被测函数中多次调用了同一底层操作函数,比如 exec.Command...被测函数先是创建了一个对象,然后查询对象的状态,在对象状态达不到期望时还要删除对象,其中查询对象是一个重要的操作,一般会进行多次重试。...在多个测试用例中都有将 exec.Command 打桩为多次调用中呈现不同行为的需求,即创建对象、查询对象状态和删除对象对返回值的期望都不一样 ...

    4.6K92

    上手Python之列表

    列表的定义 基本语法: 列表内的每一个数据,称之为元素 以 [] 作为标识 列表内每一个元素之间用, 逗号隔开  列表的定义方式: 嵌套列表的定义:  注意:列表可以一次存储多个数据,且可以为不同的数据类型...嵌套列表的下标(索引)  如果列表是嵌套的列表,同样支持下标索引 如图,下标就有2个层级了。 1. 列表的下标索引是什么?...删除元素 清空列表 修改元素 统计元素个数 等等功能,这些功能我们都称之为:列表的方法 列表的查询功能(方法) 回忆:函数是一个封装的代码单元,可以提供特定功能。...将容器内的元素依次取出进行处理的行为,称之为:遍历、迭代。 如何遍历列表的元素呢? 可以使用前面学过的while循环 如何在循环中取出列表的元素呢?...在每一次的循环中,我们可以对临时变量(元素)进行处理。 ​​​​​​​

    5.7K10

    如何将 Spring Boot Actuator 的指标信息输出到 InfluxDB 和 Prometheus

    它经过了主要的改进,旨在简化定制,并包括一些新功能,如支持其他Web技术,例如新的反应模块 - SpringWebFlux。...我创建了 JUnit测试类,它生成一些测试数据并在循环中调用应用程序公开的端点。这是该测试方法的片段。...您可能还记得,我已经向您展示了如何在 InfluxDBDocker容器中运行涌入客户端。经过几分钟的工作后,测试单元应多次调用暴露的端点。...springboot piomin/person-service 将 Prometheus整合进Grafana Prometheus在地址 192.168.99.100:9090下公开 Web控制台,您可以在其中指定带有指标的查询和显示图形...例如,我们可以计算 http_server_requests_seconds_sum的时间序列的每秒平均增长率,它返回使用 rate()函数处理请求所花费的总秒数。

    6.2K30

    MySQL通用表表达式(CTE):让复杂查询更清晰优雅的终极指南

    在同一查询中,可以定义多个 CTE,且后续 CTE 可以引用前面已定义的 CTE,这使得中间结果能够被多次使用,减少了重复代码。...列名隐式冲突:当多个CTE或主查询有同名列时,建议使用显式列定义或别名消除歧义。 过度嵌套导致性能下降:CTE虽可读性强,但过度使用可能增加执行计划复杂度。...例如,将递归CTE转换为非递归方式(如使用连接查询或窗口函数),可能更高效。MySQL 8.0及以上版本支持窗口函数,这在处理层次结构时提供了另一种选择。...下一步学习建议 掌握CTE后,你可以进一步拓展SQL技能,探索更高级的主题: 窗口函数:结合CTE使用窗口函数(如ROW_NUMBER、RANK),处理分组排序和滑动窗口分析,提升复杂报表查询能力。...下一步学习建议 掌握CTE后,你可以进一步拓展SQL技能,探索更高级的主题: 窗口函数:结合CTE使用窗口函数(如ROW_NUMBER、RANK),处理分组排序和滑动窗口分析,提升复杂报表查询能力。

    1.5K11

    mysql 单表多次查询和多表联合查询,哪个效率高?

    在数据量大的情况下,连接查询通常比多次单独查询更有效率‌。 ‌性能劣势‌:连接查询需要同时访问多个表,进行数据匹配和合并,这增加了查询的复杂度。...在某些情况下,可以通过并行处理或异步方式执行多个单表查询,从而可能提高整体处理速度(尽管这并不直接关联到MySQL查询本身的效率,但影响整体应用性能)。...可能无法利用MySQL的查询优化器来优化跨多个查询的联合数据访问。 多表联合查询 优点: 可以一次性获取所有需要的数据,减少了网络往返次数和数据库请求的数量。...MySQL的查询优化器能够更好地处理多表联合查询,通过优化索引使用、选择最有效的连接策略(如嵌套循环连接、哈希连接等)来优化查询性能。 减少了应用层的数据处理逻辑,因为数据在数据库层面就已经被整合。...注意:优化查询时,务必考虑使用适当的索引、优化查询逻辑(如避免在WHERE子句中使用函数处理列)、评估查询执行计划等,这些都是影响查询性能的关键因素。

    1.6K10

    MySQL子查询全解析:嵌套查询的强大技巧与应用实战

    MySQL子查询入门:什么是嵌套查询?...为了更形象地理解子查询,我们可以将其类比为编程中的函数调用。...就像在编程中,一个函数可以调用另一个函数来完成特定任务并将结果返回给调用者,子查询也是外层查询“调用”内层查询来获取数据,然后将这些数据用于自身的逻辑处理。...结合窗口函数进行高级分析 窗口函数(如ROW_NUMBER、RANK、SUM OVER)与子查询的结合,能够实现复杂的分组和排序逻辑,尤其在需要动态计算排名或累积值的场景中。...这种嵌套结构避免了多次扫描表,同时保证了逻辑的清晰和高效。 数据仓库与大数据环境中的扩展 在数据仓库或大规模数据处理中,子查询常用于构建ETL流程中的临时数据集或复杂连接条件。

    81310
    领券