首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何一手SQL

博主负责的项目主要采用阿里云数据库MySQL,最近频繁出现慢SQL告警,执行时间最长的竟然高达5分钟。导出日志后分析,主要原因竟然是没有命中索引和没有分页处理。...改造这些SQL的过程中,总结了一些经验分享给大家,如果有错误欢迎批评指正。 MySQL性能 最大数据量 抛开数据量和并发数,谈性能都是耍流氓。...多读少的场景,不推荐使用唯一索引,用应用程序保证唯一性。 适当冗余字段,尝试创建中间表,用应用程序计算中间结果,用空间换时间。 不允许执行极度耗时的事务,配合应用程序拆分成更小的事务。...MySQL就是鱼塘,最大并发数和网络带宽就是出水口,用户SQL就是漂浮物。...,执行这条SQL可能会堵死其他SQL,分批处理伪代码如下: int pageNo = 1; int PAGE_SIZE = 100; while(true) { List batchIdList

37140

MySQL中,21个SQL的好习惯

写完SQL先explain查看执行计划(SQL性能优化) 日常开发SQL的时候,尽量养成这个好习惯呀:写完SQL后,用explain分析一下,尤其注意走不走索引。...「避免了长事务」,delete执行时,如果age加了索引,MySQL会将所有相关的行加写锁和间隙锁,所有执行相关行会被锁住,如果删除数量大,会直接影响相关业务无法使用。...「理由:」 因为不加单引号时,是字符串跟数字的比较,它们类型不匹配,MySQL会做隐式的类型转换,把它们转换为浮点数再做比较,最后导致索引失效 11....(SQL规范优雅) 这个点,是阿里开发手册中,Mysql的规约。你的字段,尤其是表示枚举状态时,如果含义被修改了,或者状态追加时,为了后面更好维护,需要即时更新字段的注释。 18....userId,loginTime from loginuser where loginTime >= Date_ADD(NOW(),INTERVAL - 7 DAY); 「理由:」 索引列上使用mysql

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

    MySQL中,21个SQL的好习惯

    前言 每一个好习惯都是一笔财富,本文分SQL后悔药, SQL性能优化,SQL规范优雅三个方向,分享SQL的21个好习惯,谢谢阅读,加油哈~ 1....写完SQL先explain查看执行计划(SQL性能优化) 日常开发SQL的时候,尽量养成这个好习惯呀:写完SQL后,用explain分析一下,尤其注意走不走索引。...「避免了长事务」,delete执行时,如果age加了索引,MySQL会将所有相关的行加写锁和间隙锁,所有执行相关行会被锁住,如果删除数量大,会直接影响相关业务无法使用。...「理由:」 因为不加单引号时,是字符串跟数字的比较,它们类型不匹配,MySQL会做隐式的类型转换,把它们转换为浮点数再做比较,最后导致索引失效 11....(SQL规范优雅) 这个点,是阿里开发手册中,Mysql的规约。你的字段,尤其是表示枚举状态时,如果含义被修改了,或者状态追加时,为了后面更好维护,需要即时更新字段的注释。 18.

    83620

    代码,你以为的方法,可能是慢方法

    如果这样都做了,后面没增加一个需求变化,到底是,还是慢了呢?...业务逻辑复杂了,业务的逻辑、状态会散落到大量方法中,你没有抽象,就没有办法模块化,就不能区分核心和周边,需求越来越多,你就只能硬,你的这种硬,往往都是写到了核心模块里面了,之所以成为核心,不就是希望你不要总是改变它吗...,要尽可能将其变为只读的,否则,你当初的就是后来的慢; 上面的编程方式是哪种方式呢,什么编程风格?...大家,为什么总是习惯用上面那种方式编写代码呢? 可能是业务简单到就是基于SQL的CRUD。 可能是在service层中可以定义任何操作。 可能是思维已固化。 可能是转型成本太大。 可能是。。。...如果你第二次,第三次依然没有抽象出领域模型,你的每一次以为的,都是为后面每一次的慢,埋下了“因缘”。 有没有好的策略,来指导如何判断要不要搞成所谓的领域形式呢。

    47620

    AI是怎么帮我代码SQL的?(本文不卖课)

    【1】AI可以通用代码 例如,帮忙一个“半连接攻击”的代码: AI瞬间就给了结果: 不仅如此,它还进行了详细的说明: 有意思的是,AI弹出了“违反政策”的提示。...个人的判断是,目前用AI业务代码还不太现实,但一些通用的代码,是完全没有问题的。 工程师们不要焦虑,业务研发不会这么快被取代。...【4】AI可以帮忙改写代码 例如,要求AI把上面优化后的素数代码,由Python改写为Java: AI瞬间完成了改写: 同时也添加了说明: 可以看到,AI已经体现出了一定代码理解能力,并没有告诉它代码的含义...【5】AI可以帮忙SQL语句 例如,让AI帮忙建库,建表,插入的SQL语句: AI瞬间进行了输出: 并且还进行了SQL执行后的响应: 画外音:AI很入戏,它真的在扮演MySQL。...(5)协助撰写SQL语句; 是不是有点意思?希望能帮助到大家。 另外,在实践过程中,我的深切感受是,提示词的质量,将严重影响输出的质量。AI在有技巧的提示词之下,确实能发挥一定提高效率的作用。

    53420

    java代码

    1.1 局部代码块 局部代码块是定义在方法或语句中 1.1.1 案例代码六: public class BlockDemo {public static void main(String[] args)...= 10; }//System.out.println(num);//无法访问num,超出num的作用域范围} } 1.2 构造代码块 构造代码块是定义在类中成员位置的代码块 1.2.1 案例代码七:...A:静态代码块是定义在成员位置,使用static修饰的代码块 1.3.1 案例代码八: class Teacher {[/size][/font][/align][font=微软雅黑][size=3]...:1.4.1 局部代码块: 以”{}”划定的代码区域,此时只需要关注作用域的不同即可 方法和类都是以代码块的方式划定边界的 1.4.2 构造代码块 优先于构造方法执行,构造代码块用于执行所有对象均需要的初始化动作...1.4.3 静态代码块 它优先于主方法执行、优先于构造代码块执行,当以任意形式第一次使用到该类时执行。 该类不管创建多少对象,静态代码块只执行一次。 可用于给静态变量赋值,用来给类进行初始化。

    56830

    mysql 预编译 sql 实现代码

    mysql 的预编译功能,是为了那些频繁执行的语法不变的 sql 语句而准备的,每次 sql 语句执行都要经过数据库的编译,这个过程比较耗时,一条两条或十几条可能没什么感觉,如果是上千条效率会明显的有变化...mysql 提供的机制是可以让一个结构不变的 sql 语句预先在数据库中编译,我们只需要将可变的参数每次传递给它执行就可以了,这样就省去了编译的步骤,效率提高非常明显。下面就是预编译的一个小例子。...---- 代码实现 #include #include #include #include #define STRING_SIZE...int main(int argc, char* argv[]) { unsigned int err; // 初始化 mysql 句柄 MYSQL* mysql; mysql = mysql_init...-l stdc++ -l pthread -l dl -l rt 执行效果 代码分两个阶段,分别对已经绑定的 sql 语句传递了两次不同的数据,让其再执行,执行的结果是一条 sql 语句只编译一次,却产生了两个结果

    36120

    MyBatis动态SQLSQL更爽

    MyBatis 令人喜欢的一大特性就是动态 SQL。在使用 JDBC 的过程中, 根据条件进行 SQL 的拼接是很麻烦且很容易出错的。MyBatis 动态 SQL 的出现, 解决了这个麻烦。...MyBatis通过 OGNL 来进行动态 SQL 的使用的。目前, 动态 SQL 支持以下几种标签: ?...如我们在前面的[在 WHERE 条件中使用 if 标签] SQL 的时候, where 1=1 这个条件我们是不希望存在的。...=''"> and name like concat('%', #{name}, '%') 在 MySQL 中, 该函数支持多参数, 但在 Oracle 中只支持两个参数...7、代码 使用示例: https://github.com/homejim/mybatis-examples 在公众号菜单中可自行获取专属架构视频资料,包括不限于 java架构、python系列、人工智能系列

    1.5K30

    MyBatis动态SQLSQL更爽

    MyBatis 令人喜欢的一大特性就是动态 SQL。在使用 JDBC 的过程中, 根据条件进行 SQL 的拼接是很麻烦且很容易出错的。MyBatis 动态 SQL 的出现, 解决了这个麻烦。...如我们在前面的[在 WHERE 条件中使用 if 标签] SQL 的时候, where 1=1 这个条件我们是不希望存在的。...4.1.2 动态 SQL 很显然, 我们要解决这几个问题 当条件都不满足时:此时 SQL 中应该要不能有 where , 否则导致出错 当 if 有条件满足时:SQL 中需要有 where, 且第一个成立的...=''">       and name like concat('%', #{name}, '%')      在 MySQL 中, 该函数支持多参数, 但在 Oracle 中只支持两个参数...nameLike" value="'%'+name+'%'"/>      and name like #{nameLike} 更改后的查询结果如下整理了一份272页MybatisPDF文档 7、代码

    1.7K00

    避免sql

    第一,在编写 SQL 的时候,一定要小心谨慎地仔细评估。先问自己几个问题:你的 SQL 涉及到的表,它的数据规模是多少?你的 SQL 可能会遍历的数据量是多少?尽量地避免写出慢 SQL。...如何避免慢sql第一:合适的索引,SQL执行速度的快慢关键还是语句需要扫描数据的行数,如尽量不要使用 对where 条件列进行计算的做法让MySQL查询优化器不知道怎么选择索引,特定业务 可以设置联合索引让需要查询返回的列都在索引中避免回表操作...,从库一个不落的都要承受,还要更多的提供查询服务一台 MySQL 数据库,大致处理能力的极限是,每秒一万条左右的简单 SQL,这里的“简单 SQL”,指的是类似于主键查询这种不需要遍历很多条记录的 SQL...考虑到正常的系统不可能只有简单 SQL,所以实际的 TPS 还要打很多折扣。...一般一台 MySQL 服务器,平均每秒钟执行的 SQL 数量在几百左右,就已经是非常繁忙了,即使看起来 CPU 利用率和磁盘繁忙程度没那么高,你也需要考虑给数据库“减负”了。

    92000

    第39期:MySQL 时间类分区 SQL 注意事项

    上篇《MySQL 时间类分区具体实现》介绍了时间类分区的实现方法,本篇是对上篇的一个延伸,介绍基于此类分区的相关 SQL 编写注意事项。...一般来讲检索条件带分区键则执行速度,不带分区键则执行速度变慢。这种结论适应于大多数场景,但不能以偏概全,要针对不同的分区表定义来写最合适的 SQL 语句。...分区裁剪技术规定的分区函数来建立分区表,这样 SQL 就会相对随意些。...2 和 SQL 3 :执行时间都是1秒到2秒之间,效率很差,也未使用 MySQL 分区裁剪技术。...除了改造 SQL 语句,还可以给语句加 HINT 的方式来让 MySQL 使用分区裁剪技术:比如给 SQL 2 加上 HINT 后,执行时间为0.04秒,和之前改造后的语句执行效率相当。

    48510

    SpringBoot:不想代码? 一键生成entity、xml、dao、service、vue、sql代码

    一、前言 虽然SpringBoot项目已经为我们简化了很多繁杂的配置,但是业务代码还需要我们自己手动编写,后台业务分层大都是controller层 、service层、mapper层、Mybatis xml...层及前端vue层,这些层的基础代码编写没什么意义,纯体力劳动,人人代码生成器帮我们完成了这项工作(类似的代码生成工具有很多),而且不同的项目代码规范不一样,用户可以定制(反正是开源的)。...二、构建“人人代码生成器” 这是人人代码生成器源码地址https://gitee.com/rayson517/renren-generator,如下图所示: ?...image.png 他会把数据库的表列出来,每个表基本上代表一个业务模块,选择你要编写的模块对应的表(干脆全选),单击上方的生成代码按钮,系统会将所有生成的代码打成一个zip包给你 ?...image.png 他会生成所有层的基础代码,当然只是基础代码,架构师的风格决定了整个项目的代码风格,架构师拿到源码后可以对template文件中的所有模板文件进行更改,改成本项目所需的风格,这样架构师技术管理轻松许多

    67830

    思考,撸一段 SQL ? 还是一段代码

    记得刚入公司带我的研发哥们能写一手漂亮的 SQL,搜索准确、执行、效率高。 配合Web项目中的查询展示数据的需求,基本是分分钟完成任务。...那段时间基本是仰视的态度,每天都去讨教一点手 SQL 的要点,翻看一些 SQL 优化调整的技巧。 随后经历了几个项目的打磨,不断去调整公司的框架,发现项目中大段 SQL 出现的概率越来越小。...join role_user c on b.roleid = c.roleid where c.userid = '用户uuid'; 你需要在数据库中执行好,粘贴到你的代码中...下面看段相同逻辑的面向对象代码逻辑。...代码中出现大段 SQL 与面向对象的设计思路完全是背道而驰。 如果查询 SQL 出现问题,将后台打印的 SQL 粘贴到 SQL 执行工具中去执行,分析原因,两个工具切来切去,你不觉得费劲么?

    48650
    领券