`
ych19850810
  • 浏览: 32447 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

sql语句中的<>和in

阅读更多
今天优化了一段项目中的代码。代码的作用就是在用户表和用户账户表中查出所有有账户的用户,当然查出来的用户应该是不重复的(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'不是随便用的,使用得不当可能会严重影响查询速度,要慎用!
3
1
分享到:
评论

相关推荐

    Oracle数据库Sql语句详解大全.pptx

    * 使用 IN 进行多值查询:SELECT &lt; 列名 &gt; FROM &lt; 表名 &gt; WHERE &lt; 列名 &gt; IN (&lt; 数值 1 &gt;, &lt; 数值 2 &gt;, ...) 三、NVL 函数和字符串连接符 * 使用 NVL 函数处理空值:SELECT &lt; 列名 &gt; FROM &lt; 表名 &gt; WHERE &lt; 列名 &gt;...

    mybatis动态sql(使用<where>标签来处理多个查询条件)

    MyBatis提供了多种动态SQL标签,如`&lt;if&gt;`、`&lt;choose&gt;`、`&lt;when&gt;`、`&lt;otherwise&gt;`、`&lt;trim&gt;`、`&lt;where&gt;`、`&lt;set&gt;`和`&lt;foreach&gt;`等,这些标签可以用来构建灵活多变的SQL语句。 #### 三、`&lt;where&gt;`标签详解 `&lt;where&gt;`...

    lecco sql export pro(SQL优化器)

    当然,你也可以从 源语句和重写后的SQL语句中任选两条进行比较&lt;br&gt;&lt;br&gt; 从比较的结果可以看到,重写得到的SQL124把第一个Exists改写成了In;在字段DPT_ID上进行了合并空字符串的操作以诱导数据库先执行子查询中的...

    Sqlserver2000经典脚本

    3.6.2 字符串在编号查询中的应用示例及常见问题.sql&lt;br/&gt;│ │ 3.6.3 动态参数的存储过程示例.sql&lt;br/&gt;│ │ 3.6.4 动态他Transact-SQL语句处理中的常见问题演示.sql&lt;br/&gt;│ │ 3.7.3 text与ntext字段的复制和合并...

    C#编程经验技巧宝典

    72&lt;br&gt;&lt;br&gt;0102 将字符串首字母转换大写 72&lt;br&gt;&lt;br&gt;0103 如何进行字节数组和字符串的相互转换 72&lt;br&gt;&lt;br&gt;0104 如何把一个按空格分割的字符串存储在一个ArrayList数组中 73&lt;br&gt;&lt;br&gt;4.2 获取字符串信息 73&lt;br&gt;...

    mysql5.1中文手册

    在SQL语句中使用COLLATE&lt;br&gt;10.3.9. COLLATE子句优先&lt;br&gt;10.3.10. BINARY操作符&lt;br&gt;10.3.11. 校对确定较为复杂的一些特殊情况&lt;br&gt;10.3.12. 校对必须适合字符集&lt;br&gt;10.3.13. 校对效果的示例&lt;br&gt;10.4. 字符集支持影响...

    mybatis-demo11-动态SQL语句.zip

    `&lt;foreach&gt;`标签用于遍历集合,构建IN或JOIN等操作的SQL语句。例如,传入一个用户ID列表,构建一个包含多个ID的IN条件: ```xml &lt;select id="selectByIds" parameterType="list" resultType="User"&gt; SELECT * ...

    MyBatis动态拼接SQL

    MyBatis是一款强大的Java持久层框架,它允许开发者将SQL语句直接写在XML映射文件或注解中,提供了灵活的数据库交互方式。在某些场景下,我们可能需要根据业务逻辑动态地拼接SQL语句,以实现更复杂的查询需求。这就是...

    MYSQL培训经典教程(共两部分) 1/2

    数据库优化 177&lt;br&gt;8.1 索引的使用 178&lt;br&gt;8.1.1索引对单个表查询的影响 ...和TEXT类型 185&lt;br&gt;8.2.3 使用ANALYSE过程检查表列 186&lt;br&gt;8.2.3 总结 187&lt;br&gt;8.3 SQL查询的优化 187&lt;br&gt;8.3.1 使用EXPLAIN语句检查SQL语句 ...

    MYSQL培训经典教程(共两部分) 2/2

    数据库优化 177&lt;br&gt;8.1 索引的使用 178&lt;br&gt;8.1.1索引对单个表查询的影响 ...和TEXT类型 185&lt;br&gt;8.2.3 使用ANALYSE过程检查表列 186&lt;br&gt;8.2.3 总结 187&lt;br&gt;8.3 SQL查询的优化 187&lt;br&gt;8.3.1 使用EXPLAIN语句检查SQL语句 ...

    C#.net_经典编程例子400个

    7&lt;br&gt;1.2 工具栏设计 7&lt;br&gt;实例007 带背景的工具栏 7&lt;br&gt;实例008 浮动工具栏 8&lt;br&gt;实例009 带下拉菜单的工具栏 9&lt;br&gt;实例010 具有提示功能的工具栏 9&lt;br&gt;1.3 状态栏设计 10&lt;br&gt;实例011 在状态栏中显示...

    Golang sqlx 使用sql语句 Where in 解决办法

    方法1、使用语言的for语句循环生成SQL语句中的“?”,类似这样: 新建方法 func placeholders(n int) string { var b strings.Builder for i := 0; i 0 { b.WriteString("?") } return b.String() }  调用...

    Oracle——sql语句优化

    本文将深入探讨几种常见的SQL操作符及其优化方法,包括IN、NOT IN、&lt;&gt;、IS NULL、&gt;、&lt;、LIKE以及UNION等,旨在帮助数据库管理员和开发人员构建更为高效、响应迅速的应用系统。 #### IN操作符:灵活性与性能的平衡 ...

    SQL控制语句集锦SQL语句集锦

    在本篇文章中,我们将对 SQL 控制语句集锦进行详细的介绍,包括 DISTINCT、WHERE、IN 和 BETWEEN 等控制语句的使用方法和实例。 DISTINCT 控制语句 DISTINCT 控制语句是 SQL 中最常用的控制语句之一,它允许我们从...

    C#将Lambda表达式转成Sql语句

    然而,在某些情况下,我们需要将这些表达式转换为实际的SQL语句,以便在数据库中执行。本文将深入探讨如何实现这一过程。 首先,我们需要了解Lambda表达式的基本结构。Lambda表达式通常以参数列表开始,后面跟着一...

    SQL 执行超长语句

    在数据库管理与开发过程中,编写SQL语句是必不可少的一环。有时,我们可能会遇到需要执行非常长的SQL语句的情况。这些超长语句可能由于包含大量的条件、子查询或是数据量较大等原因而变得异常复杂。本文将围绕“SQL...

    vc++SQL语句嵌套

    在提供的压缩包文件“实例81 SQL语句嵌套”中,很可能是包含了具体的源码示例,这些示例可以帮助初学者更直观地理解如何在VC++项目中编写和使用嵌套SQL语句。通过学习和实践这些示例,你将能更好地掌握这一技巧,...

    《SQL》语句整理

    `UPDATE`语句用于修改表中的数据,如`UPDATE &lt;表名&gt; SET &lt;列名&gt;=更新值&gt; WHERE &lt;更新条件&gt;`;`DELETE FROM`用于删除特定行,`Truncate Table`则会清空整个表,但不涉及表结构。 查询是SQL的核心功能。基础查询包括`...

    查看LINQ生成SQL语句的几种方法

    在实际开发中,有时我们需要了解LINQ查询是如何转换为SQL语句的,以便于调试和优化性能。以下将详细介绍几种查看LINQ生成SQL语句的方法。 1. **Debug.WriteLine()** 在使用LINQ查询时,可以利用`Debug.WriteLine()...

    oracle 查看当前会话执行的sql语句

    在Oracle数据库管理中,有时我们需要了解某个特定会话(Session)正在执行哪些SQL语句。这在性能调优、问题诊断等场景下尤为重要。以下将详细介绍如何通过不同的方法来查看当前会话所执行的SQL语句及相关信息。 ###...

Global site tag (gtag.js) - Google Analytics