首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏捞月亮的小北

    9. 动态SQL

    Mybaits 框架的动态 SQL 技术是一种根据特定条件动态拼接 SQL 语句的功能 , 它存在的意义是为了解决拼接 SQL 语句字符串时的痛点问题 ‍ Mybatis 中动态 SQL 怎么理解? 同时,也需要注意 SQL 注入和动态 SQL 的维护难度问题。 SQL 片段的作用是将常用的 SQL 语句封装成一个可重用的组件,方便在多个地方使用。 Mybatis 中的 SQL 片段有两种类型: 动态 SQL 片段:根据不同的条件生成不同的 SQL 语句。 6.2 SQL 片段的作用 ‍ SQL 片段(SQL Fragments)是 Mybatis 中一个重要的功能,它的作用是将一段 SQL 片段用 <sql>​ 元素封装,并在需要的地方通过 <include 减小 SQL 的维护难度:将一段 SQL 代码封装成 SQL 片段,可以方便维护和修改,避免了对 SQL 语句的重复修改和维护。

    49110编辑于 2023-12-01
  • 9SQL优化技巧

    大多数的接口性能问题,很多情况下都是SQL问题,在工作中,我们也会定期对慢SQL进行优化,以提高接口性能。这里总结一下常见的优化方向和策略。 对于选择性低的列(如性别列,其中只有“男”和“女”两个值),创建索引可能不会产生太大的查询性能提升。过度索引:当表中存在过多的索引时,可能会导致数据库优化器在选择使用哪个索引时变得困难。 这可能会导致查询性能下降,因为优化器可能选择了不是最优的索引。因此,在设计数据库时,需要根据查询需求和数据变更模式来仔细选择需要创建索引的列。 这种改造不仅使查询更加简洁,而且可能还会提高查询的性能。JOIN 操作通常比子查询的效率更高,特别是在处理大型数据集时。 这种场景下,如果简单地一次性加载所有数据并进行分页,会导致性能问题,包括内存消耗、数据库查询效率等。

    1.2K10编辑于 2024-05-21
  • 来自专栏程序员奇点

    SQL 性能优化

    ,在FROM 子句中包含多个表的情况下,你必须选择记录条数最小的表作为基础表, 如果有3个以上的表连接查,选择交叉表(Insertection table)作为基础表,交叉表指的是被其他表锁引用的表 性能优化 SQL语句中IN包含的值不应过多 MySQL对于IN做了相应的优化,即将IN中的常量全部存储在一个数组里面,而且这个数组是排好序的。但是如果数值较多,产生的消耗也是比较大的。 等价于 select * from 表A where exists(select * from 表B where 表B.id=表A.id) 区分in和exists主要是造成了驱动顺序的改变(这是性能变化的关键 如何高效的写出一个替代not exists的sql语句?

    1.1K40发布于 2019-08-30
  • 来自专栏用户8907256的专栏

    SQL性能优化以及性能测试

    SQL性能优化以及性能测试 博主介绍 笛卡尔连接 分页limit的sql优化的几种方法 笛卡尔连接 例1: 没有携带on的条件字句,此条slq查询的结构集等价于,a表包含的条数*b表包含的乘积: select * from table a cross join table b; 例2:拥有携带on字句的sql,等价于inner join: select * from table a cross join table b on a.id=b.id; 分页limit的sql优化的几种方法 规则;表包含的数据较少的数据量,作为驱动表(小表驱动大表,一般mysql的优化器会做出相应的优化的,但是为了防止一些抽风现象可以用 //first_name,last_name已经在表里创建了组合索引,emp_no为主键; 实例1: //此sql是不能利用到索引的,原因是:mysql的优化器,是根据成本计算的,如果全表扫描比使用索引 通过explain 查看sql性能如果Extra的值为null时,说明是可以通过索引避免排序的.如果Extra的值是Using filesort 是不可以进行索引排序的 select * from table

    1K30编辑于 2022-04-14
  • 来自专栏一个爱吃西瓜的程序员

    学习SQL9】-集合与联结

    现在我们开始学习使用2张以上的表的SQL语句。通过以行方向为单位的集合运算符和以列方向为单位的联结,就可以将分散在多张表中的数据组合成期望的结果。 SQL中的联结有很多种,我们主要学习内联结和外联结两种。 内联结—INNER JOIN 内联结(INNER JOIN)是运用最广泛的联结运算。 SP.shop_name, SP.product_id, P.product_name FROM ShopProduct AS SP CROSS JOIN Product AS P; 上述的SQL

    1.5K120发布于 2018-04-04
  • 来自专栏啄木鸟软件测试

    软件性能测试(连载9

    Linux内核根据应用程序的要求来分配内存,应用程序分配了内存可能没有实际全部使用,为了提高性能,这部分没用的内存可以留作其他用途,由于这部分内存是属于每个进程的,内核直接回收利用会带来麻烦,所以内核采用一种过度分配内存 total 交换区的总量 Swap: ###k used 使用的交换区总量 Swap: ###k free 空闲的交换区总量 Swap: ###k cached 缓冲的交换区总量 top命令进程中关于内存性能如表 3-9所示。 表3-9 top命令进程中关于内存性能参数 标记 解释 VIRT 进程虚拟内存的大小,只要是进程申请过的内存,即便还没有真正分配物理内存,也会计算在内。

    1.2K40发布于 2020-02-20
  • 来自专栏辰远

    SQL电脑性能测试

    循环添加10w行数据,测试索引效果 USE myschool; #创建测试表 DROP TABLE IF EXISTS Test; CREATE TABLE Test( id INT, NAME VARCHAR(50) ); # 循环添加10W条数据数据 DROP PROCEDURE IF EXISTS usp_initial_data; DELIMITER // CREATE PROCEDURE usp_initial_data() BEGIN DECLARE i INT; SET

    3.1K40编辑于 2022-11-21
  • 来自专栏JAVA高级架构

    SQL性能优化梳理

    第一层:客户端通过连接服务,将要执行的sql指令传输过来 第二层:服务器解析并优化sql,生成最终的执行计划并执行 第三层:存储引擎,负责数据的储存和提取 1.2 锁 数据库通过锁机制来解决并发场景-共享锁 被用来设计处理大量短期事务,具有高性能和自动奔溃恢复的特性。 MyISAM引擎,不支持事务和行级锁,奔溃后无法安全恢复。 "value2"}'); SELECT * FROM json_test WHERE JSON_CONTAINS(name, '$.name1'); ---->来自JVM专家-达 关注explain在性能分析中的使用

    1.3K70发布于 2018-04-19
  • 来自专栏JMCui

    SQL优化二(SQL性能调优)

    )负责将更改的buffer 从db buffer cache中写到datafile中去,通过一个dbwn进程(dbw0)就足够了,但是也可以配置更多额外的dbwr进程,它可以提升频繁更改的数据库系统的性能 因为分离了更改数据库buffer的任务:dbwn散列写buffer到disk中,执行快速的顺序写到redo,所以数据库提升了性能。 1.用户提交了一个事务。 优化技巧9:不要使用包含函数或操作符放入WHERE从句中的关键字作为索引,会导致索引失效,可以考虑使用函数索引。 deptno from dept; 优化技巧18:Order By语句中的非索引列会降低性能,可以通过添加索引的方式处理。 优化技巧20:调整SQL语句的目的是为了在执行中使资源的使用减少到最小。除了选择使用不同的SQL语法来优化执行代价,还可以通过调整执行顺序优化SQL

    1.9K61发布于 2018-03-15
  • 来自专栏电光石火

    SQL 性能调优

    (8) 删除重复记录 (9) 用TRUNCATE替代DELETE (10)尽量多使用COMMIT (11) 用Where子句替换HAVING子句 (12) 减少对表的查询 (13) 通过内部函数提高SQL ,还要做到写出性能优良的SQL,以下为笔者学习、摘录、并汇总部分资料与大家分享!   FROM  EMP E  WHERE  E.ROWID > (SELECT MIN(X.ROWID) FROM  EMP X  WHERE  X.EMP_NO = E.EMP_NO); 回到顶部 (9性能上的差异,关键看你的from和where子句。比如说如果你的where条件中可以通过索引,那显然 select 1 from ... 的性能比 select * from ... 好。 仔细检查order by语句以找出非索引项或者表达式,它们会降低性能

    4.7K10发布于 2019-12-13
  • 来自专栏全栈程序员必看

    编写高性能SQL

    在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的编写,刚开始不会体会出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统的响应速度就成为目前系统需要解决的最主要的问题之一 在多数情况下,Oracle使用索引来更快的遍历表,优化器主要根据定义的索引来提高性能。 在编写SQL语句时我们应清楚优化器根据何种原则来删除索引,这有助于写出高性能SQL语句。    下面就某些SQL语句的where子句编写中需要注意的问题作详细介绍。 也就是说如果某列存在空值,即使对该列建索引也不会提高性能。    任何在where子句中使用is null或is not null的语句优化器是不允许使用索引的。  仔细检查order by语句以找出非索引项或者表达式,它们会降低性能

    3.1K20编辑于 2021-12-27
  • 来自专栏Python数据科学

    SQL 性能优化梳理

    第一层:客户端通过连接服务,将要执行的sql指令传输过来 第二层:服务器解析并优化sql,生成最终的执行计划并执行 第三层:存储引擎,负责数据的储存和提取 1.2 锁 数据库通过锁机制来解决并发场景-共享锁 被用来设计处理大量短期事务,具有高性能和自动崩溃恢复的特性。 MyISAM引擎,不支持事务和行级锁,崩溃后无法安全恢复。 name2": "value2"}'); SELECT * FROM json_test WHERE JSON_CONTAINS(name, '$.name1'); 来自JVM专家-达 关注explain在性能分析中的使用

    1K20发布于 2019-11-21
  • 来自专栏电光石火

    SQL 性能调优

    我们要做到不但会写SQL,还要做到写出性能优良的SQL,以下为笔者学习、摘录、并汇总部分资料与大家分享! FROM  EMP E  WHERE  E.ROWID > (SELECT MIN(X.ROWID) FROM  EMP X  WHERE  X.EMP_NO = E.EMP_NO); (9性能上的差异,关键看你的from和where子句。比如说如果你的where条件中可以通过索引,那显然 select 1 from ... 的性能比 select * from ... 好。 也就是说如果某列存在空值,即使对该列建索引也不会提高性能。 任何在where子句中使用is null或is not null的语句优化器是不允许使用索引的。 仔细检查order by语句以找出非索引项或者表达式,它们会降低性能

    3.7K60发布于 2018-01-18
  • 来自专栏程序员的成长之路

    SQL 性能优化梳理

    第一层:客户端通过连接服务,将要执行的sql指令传输过来 第二层:服务器解析并优化sql,生成最终的执行计划并执行 第三层:存储引擎,负责数据的储存和提取 1.2 锁 数据库通过锁机制来解决并发场景-共享锁 被用来设计处理大量短期事务,具有高性能和自动崩溃恢复的特性。 MyISAM引擎,不支持事务和行级锁,崩溃后无法安全恢复。 name2": "value2"}'); SELECT * FROM json_test WHERE JSON_CONTAINS(name, '$.name1'); 来自JVM专家-达 关注explain在性能分析中的使用

    86920发布于 2019-11-23
  • 来自专栏.NET企业级解决方案应用与咨询

    SQL 性能优化 总结

    SQL 性能优化 总结 (1)选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 (5)在SQL*Plus , SQL*Forms和Pro*C 中重新设置ARRAYSIZE 参数, 可以增加每次数据库访问的检索数据量 ,建议值为200。 例子:DELETE FROM EMP E WHERE E.ROWID > (SELECT MIN(X.ROWID) FROM EMP X WHEREX.EMP_NO = E.EMP_NO); (9) (10)尽量多使用COMMIT: 只要有可能,在程序中尽量多使用 COMMIT, 这样程序的性能得到提高,需求也会因为 COMMIT所释放的资源而减少: COMMIT所释放的资源: 语句:目前各种关于SQL优化的图形化工具层出不穷,大家自己搜索。

    2.5K20发布于 2019-09-17
  • 来自专栏猿人谷

    Oracle SQL性能优化

    语句, 估算索引的利用率, 绑定变量 , 读数据块等; (5)      在SQL*Plus , SQL*Forms和Pro*C中重新设置ARRAYSIZE参数, 可以增加每次数据库访问的检索数据量 DELETE  FROM  EMP E  WHERE  E.ROWID > (SELECT MIN(X.ROWID) FROM  EMP X  WHERE  X.EMP_NO = E.EMP_NO); (9) (译者按: TRUNCATE只在删除全表适用,TRUNCATE是DDL不是DML) (10) 尽量多使用COMMIT: 只要有可能,在程序中尽量多使用COMMIT, 这样程序的性能得到提高,需求也会因为 效率.: 复杂的SQL往往牺牲了执行效率. (33) 避免使用耗费资源的操作: 带有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL语句会启动SQL引擎 执行耗费资源的排序(SORT)功能.

    3.6K70发布于 2018-01-17
  • 来自专栏机器学习/数据可视化

    SQL进阶-9-谓词exists使用

    SQL进阶-9-EXISTS谓词的使用 支撑SQL和关系数据库的两个重要理论基础: 数学领域的集合论 现代逻辑学标准体系的谓词逻辑(predicate logic) 本文中重点介绍的是谓词exists的用法 extists谓词不仅可以将多行数据作为整体来表达高级的条件,还可以在使用关联子查询时表现出良好的性能。 ,col10); -- 查询至少存在一个9的行记录:any select * from Tablename where 9 = any (col1, col2, col3,... ,col10); -- where 9 in (col1, col2, col3,... ,col10) is null; 小结 SQL谓词指的是返回值为真值的函数 EXISTS与其他谓词不同,接受的参数是集合;可以看做是一种高阶函数 SQL中没有实现全称量词相当的谓词,但是可以通过not

    1.4K20发布于 2021-03-01
  • 来自专栏架构驿站

    性能优化】MySQL之SQL剖析(SQL profile)

    分析SQL执行带来的开销是优化SQL的重要手段。在MySQL数据库中,可以通过配置profiling参数来启用SQL剖析。该参数可以在全局和session级别来设置。 该参数开启后,后续执行的SQL语句都将记录其资源开销,诸如IO,上下文切换,CPU,Memory等等。根据这些开销进一步分析当前SQL瓶颈从而进行优化与调整。 --------------------------------------------------------------------------------------------+ 3、获取SQL 语句的开销信息 --可以直接使用show profile来查看上一条SQL语句的开销信息 --注,show profile之类的语句不会被profiling,即自身不会产生Profiling - 语句用于查询query_id为2的SQL开销,且按最大耗用时间倒序排列 root@localhost[sakila]> set @query_id=2; root@localhost[sakila

    83540编辑于 2022-03-25
  • 来自专栏全栈程序员必看

    Mysql性能优化一:SQL语句性能优化

    8,应尽量避免在 where 子句中对字段进行表达式操作,应尽量避免在where子句中对字段进行函数操作 9,很多时候用 exists 代替 in 是一个好的选择: select num from a 18,一些SQL查询语句应加上nolock,读、写是会相互阻塞的,为了提高并发性能,对于一些查询,可以加上nolock,这样读的时候可以允许写,但缺点是可能读到未提交的脏数据。 24,当服务器的内存够多时,配制线程数量 = 最大连接数+5,这样能发挥最大的效率;否则使用 配制线程数量<最大连接数启用SQL SERVER的线程池来解决,如果还是数量 = 最大连接数+5,严重的损害服务器的性能 47,EXPLAIN SELECT 查询用来跟踪查看效果  使用 EXPLAIN 关键字可以让你知道MySQL是如何处理你的SQL语句的。这可以帮你分析你的查询语句或是表结构的性能瓶颈。 可以在执行sql前调用begin,多条sql形成一个事物(即使autocommit打开也可以),将大大提高性能

    2.5K21发布于 2021-11-10
  • 来自专栏信息技术智库

    9.MySQL数据查询SQL

    9.MySQL数据查询SQL 语法格式: select 字段列表|* from 表名 [where 搜索条件] [group by 分组字段 [having 分组条件]] [order by 排序字段  -- 问题出在 sql 计算的顺序上,sql会优先处理and条件,所以上面的sql语句就变成了 -- 查询变成了为年龄22的不管性别,或者年龄为 25的女生 -- 如何改造sql符合我们的查询条件呢? +---------+ -- 统计 users 表中的数据量 select count(*) from users; +----------+ | count(*) | +----------+ | 9  | +----------+ select count(id) from users; +-----------+ | count(id) | +-----------+ | 9 | +-------- rows in set (0.00 sec) -- 如果按照sex这一列进行统计,结果就是8个而不是9个,因为sex这一列中有NULL值存在 mysql> select count(sex) from 

    1.3K30编辑于 2022-07-29
领券