今天优化了一段项目中的代码。代码的作用就是在用户表和用户账户表中查出所有有账户的用户,当然查出来的用户应该是不重复的(distinct一下),这2个表中的记录大约都为2万条左右,数据量还是很大的,代码通过hibernate的转换出来是这样的:
select * from ( select rownumber() over() as rownumber_, row_.* from ( select distinct userpo1_.ID as col_0_0_ from
RUN08110.T_ACCUSR accountuse0_ inner join RUN08110.T_USRINFO userpo1_ on accountuse0_.USER_ID=userpo1_.ID where 1=1
and accountuse0_.CHK_FLAG<>0 and (userpo1_.IDENTITY in (4 , 5 , 6 , 7)) ) as row_ ) as temp_ where rownumber_ <= ?
很简单的一条语句,没有必要详细的解释。看起来任何问题都没有,运行时肯定不会报错,但查询速度非常非常慢,从后台取出数据到前台分页显示,如果计算机性能不太好,可能需要1分半钟的时间,问题困扰了我很长时间,我尝试着更换表之间的连接方式,但是效果很不明显,真是百思不得其解。后来和同事一起分析了一下,我把'<>'换成了'>',把 'in (4 , 5 ,6 , 7)'换成了'>3'(和以前的条件是等价的),重启服务器,再执行一遍查询,简直太不可思议了,查询速度非常非常快,优化成功!看来用sql查询时'<>'以及'in'不是随便用的,使用得不当可能会严重影响查询速度,要慎用!
分享到:
相关推荐
* 使用 IN 进行多值查询:SELECT < 列名 > FROM < 表名 > WHERE < 列名 > IN (< 数值 1 >, < 数值 2 >, ...) 三、NVL 函数和字符串连接符 * 使用 NVL 函数处理空值:SELECT < 列名 > FROM < 表名 > WHERE < 列名 >...
MyBatis提供了多种动态SQL标签,如`<if>`、`<choose>`、`<when>`、`<otherwise>`、`<trim>`、`<where>`、`<set>`和`<foreach>`等,这些标签可以用来构建灵活多变的SQL语句。 #### 三、`<where>`标签详解 `<where>`...
当然,你也可以从 源语句和重写后的SQL语句中任选两条进行比较<br><br> 从比较的结果可以看到,重写得到的SQL124把第一个Exists改写成了In;在字段DPT_ID上进行了合并空字符串的操作以诱导数据库先执行子查询中的...
3.6.2 字符串在编号查询中的应用示例及常见问题.sql<br/>│ │ 3.6.3 动态参数的存储过程示例.sql<br/>│ │ 3.6.4 动态他Transact-SQL语句处理中的常见问题演示.sql<br/>│ │ 3.7.3 text与ntext字段的复制和合并...
72<br><br>0102 将字符串首字母转换大写 72<br><br>0103 如何进行字节数组和字符串的相互转换 72<br><br>0104 如何把一个按空格分割的字符串存储在一个ArrayList数组中 73<br><br>4.2 获取字符串信息 73<br>...
在SQL语句中使用COLLATE<br>10.3.9. COLLATE子句优先<br>10.3.10. BINARY操作符<br>10.3.11. 校对确定较为复杂的一些特殊情况<br>10.3.12. 校对必须适合字符集<br>10.3.13. 校对效果的示例<br>10.4. 字符集支持影响...
`<foreach>`标签用于遍历集合,构建IN或JOIN等操作的SQL语句。例如,传入一个用户ID列表,构建一个包含多个ID的IN条件: ```xml <select id="selectByIds" parameterType="list" resultType="User"> SELECT * ...
MyBatis是一款强大的Java持久层框架,它允许开发者将SQL语句直接写在XML映射文件或注解中,提供了灵活的数据库交互方式。在某些场景下,我们可能需要根据业务逻辑动态地拼接SQL语句,以实现更复杂的查询需求。这就是...
数据库优化 177<br>8.1 索引的使用 178<br>8.1.1索引对单个表查询的影响 ...和TEXT类型 185<br>8.2.3 使用ANALYSE过程检查表列 186<br>8.2.3 总结 187<br>8.3 SQL查询的优化 187<br>8.3.1 使用EXPLAIN语句检查SQL语句 ...
数据库优化 177<br>8.1 索引的使用 178<br>8.1.1索引对单个表查询的影响 ...和TEXT类型 185<br>8.2.3 使用ANALYSE过程检查表列 186<br>8.2.3 总结 187<br>8.3 SQL查询的优化 187<br>8.3.1 使用EXPLAIN语句检查SQL语句 ...
7<br>1.2 工具栏设计 7<br>实例007 带背景的工具栏 7<br>实例008 浮动工具栏 8<br>实例009 带下拉菜单的工具栏 9<br>实例010 具有提示功能的工具栏 9<br>1.3 状态栏设计 10<br>实例011 在状态栏中显示...
方法1、使用语言的for语句循环生成SQL语句中的“?”,类似这样: 新建方法 func placeholders(n int) string { var b strings.Builder for i := 0; i 0 { b.WriteString("?") } return b.String() } 调用...
本文将深入探讨几种常见的SQL操作符及其优化方法,包括IN、NOT IN、<>、IS NULL、>、<、LIKE以及UNION等,旨在帮助数据库管理员和开发人员构建更为高效、响应迅速的应用系统。 #### IN操作符:灵活性与性能的平衡 ...
在本篇文章中,我们将对 SQL 控制语句集锦进行详细的介绍,包括 DISTINCT、WHERE、IN 和 BETWEEN 等控制语句的使用方法和实例。 DISTINCT 控制语句 DISTINCT 控制语句是 SQL 中最常用的控制语句之一,它允许我们从...
然而,在某些情况下,我们需要将这些表达式转换为实际的SQL语句,以便在数据库中执行。本文将深入探讨如何实现这一过程。 首先,我们需要了解Lambda表达式的基本结构。Lambda表达式通常以参数列表开始,后面跟着一...
在数据库管理与开发过程中,编写SQL语句是必不可少的一环。有时,我们可能会遇到需要执行非常长的SQL语句的情况。这些超长语句可能由于包含大量的条件、子查询或是数据量较大等原因而变得异常复杂。本文将围绕“SQL...
在提供的压缩包文件“实例81 SQL语句嵌套”中,很可能是包含了具体的源码示例,这些示例可以帮助初学者更直观地理解如何在VC++项目中编写和使用嵌套SQL语句。通过学习和实践这些示例,你将能更好地掌握这一技巧,...
`UPDATE`语句用于修改表中的数据,如`UPDATE <表名> SET <列名>=更新值> WHERE <更新条件>`;`DELETE FROM`用于删除特定行,`Truncate Table`则会清空整个表,但不涉及表结构。 查询是SQL的核心功能。基础查询包括`...
在实际开发中,有时我们需要了解LINQ查询是如何转换为SQL语句的,以便于调试和优化性能。以下将详细介绍几种查看LINQ生成SQL语句的方法。 1. **Debug.WriteLine()** 在使用LINQ查询时,可以利用`Debug.WriteLine()...
在Oracle数据库管理中,有时我们需要了解某个特定会话(Session)正在执行哪些SQL语句。这在性能调优、问题诊断等场景下尤为重要。以下将详细介绍如何通过不同的方法来查看当前会话所执行的SQL语句及相关信息。 ###...