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

如何一手SQL

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

36740

MySQL中,21个SQL的好习惯

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

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

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

94010

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

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

45320

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在有技巧的提示词之下,确实能发挥一定提高效率的作用。

33920

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 静态代码块 它优先于主方法执行、优先于构造代码块执行,当以任意形式第一次使用到该类时执行。 该类不管创建多少对象,静态代码块只执行一次。 可用于给静态变量赋值,用来给类进行初始化。

56030

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 语句只编译一次,却产生了两个结果

30420

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

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

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

47210

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文件中的所有模板文件进行更改,改成本项目所需的风格,这样架构师技术管理轻松许多

55630

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

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

47350

MySQL时间类分区SQL的一些注意事项

一般来讲检索条件带分区键则执行速度,不带分区键则执行速度变慢。这种结论适应于大多数场景,但不能以偏概全,要针对不同的分区表定义来写最合适的SQL语句。...其大致含义是MySQL会根据SQL语句的过滤条件对应的分区函数进行计算,并把计算结果穿透到底层分区表从而减小扫描记录数的一种优化策略。...分区裁剪技术规定的分区函数来建立分区表,这样SQL就会相对随意些。...2和SQL 3:执行时间都是1秒到2秒之间,效率很差,也未使用MySQL分区裁剪技术。...除了改造SQL语句,还可以给语句加HINT的方式来让MySQL使用分区裁剪技术:比如给SQL 2加上HINT后,执行时间为0.04秒,和之前改造后的语句执行效率相当。

1.1K30
领券